When you fetch data with Apollo Client using either
useQuery (which uses
watchQuery behind the scenes), you’re telling Apollo Client to keep an eye on the cache for future changes to the data that resulted from your query, and depending on your configured fetch policy, refetch data from your backend if the query can’t be satisfied from the cache. If any changes happen to the cached data, and your query is still “active” (it’s still watching the cache for changes), your application will be notified of those changes. Apollo Client queries will continue to watch the cache / refetch as needed until they’re told to stop (which can be done manually or automatically - e.g. when a component using
useQuery is unmounted).
resetStore can come in handy when you want to fully clear out the cache, and have all of the active queries re-run themselves, to bring the cache back into a fresh state. E.g. maybe your application stores data in the cache that should be available to anyone using the application, but also stores data in the cache that is specific to a user; logging that user out should remove their specific data, but refreshing things to keep the shared data in place is useful to get things ready for the next user. Picture an application that dynamically renders its navigation based on the result of querying a GraphQL backend to know which menu items to show. If this navigation is going to be same for everybody, but we want to clear out user specific parts of the cache, calling
resetStore on logout could be a good choice to make sure the active navigation query is rerun before someone else logs in.
clearStore can come in handy when you want to wipe the entire cache, without re-running any of the active queries.