Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/fix-placeholder-data-select-error.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@tanstack/query-core': patch
---

fix(query-core): reset `isPlaceholderData` when `select` throws on placeholder data
19 changes: 19 additions & 0 deletions packages/query-core/src/__tests__/queryObserver.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,25 @@ describe('queryObserver', () => {
})
})

it('should not have isPlaceholderData true when selector throws on placeholder data', () => {
const key = queryKey()
const queryFn = () => sleep(10).then(() => ({ count: 1 }))
const observer = new QueryObserver(queryClient, {
queryKey: key,
queryFn,
placeholderData: { count: 0 },
select: () => {
throw new Error('selector error')
},
})

const result = observer.getCurrentResult()

expect(result.isError).toBe(true)
expect(result.isPlaceholderData).toBe(false)
expect(result.data).toBeUndefined()
})

it('should return stale data if selector throws an error', async () => {
const key = queryKey()
const results: Array<QueryObserverResult> = []
Expand Down
1 change: 1 addition & 0 deletions packages/query-core/src/queryObserver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -552,6 +552,7 @@ export class QueryObserver<
data = this.#selectResult
errorUpdatedAt = Date.now()
status = 'error'
isPlaceholderData = false
}

const isFetching = newState.fetchStatus === 'fetching'
Expand Down