Open epmatsw opened 1 month ago
This is such an interesting one. Both skip: true
and skipToken
have almost the same code paths. It looks like the only difference is that we set some extra options for skip: true
(not sure why to be honest). See how skipToken
returns early while skip: true
adds the extra options: https://github.com/apollographql/apollo-client/blob/1f0333e1644cb95b6862441ff957e60ec5f7a59e/src/react/hooks/useSuspenseQuery.ts#L357-L382
Other than this, both of these code paths rely on checking fetchPolicy: 'standby'
in the downstream code which should avoid suspending (the __use
hook is the thing that causes it to suspend): https://github.com/apollographql/apollo-client/blob/1f0333e1644cb95b6862441ff957e60ec5f7a59e/src/react/hooks/useSuspenseQuery.ts#L253
I'll have to dig into this further to understand where the difference is, but unfortunately won't have time to do so for a couple days. Thanks for raising the issue!
Issue Description
I'm pretty sure this is a bug with
skip: true
, or at leastskipToken
behaves like I'd expect.If you have a
useSuspenseQuery
that usesskip: boolean
and toggles between true and false for that, it seems like sometimes the switch from true to false causes the query to skip the cache and suspend.In the demo, you can quickly hit the button to toggle skipping on or off. Every once in a while, you can see the top one (skip: boolean) pop a suspend for a few frames, while the bottom one (skipToken) correctly re-reads from the cache.
Link to Reproduction
https://codesandbox.io/p/sandbox/lz67k5?file=%2Fsrc%2FApp.tsx%3A34%2C67
Reproduction Steps
No response
@apollo/client
version3.11.8