web icon indicating copy to clipboard operation
web copied to clipboard

InMemoryCache

Open ivonakov opened this issue 5 years ago • 2 comments

https://github.com/javascripteverywhere/web/blob/26319b2669bb9b7e80ae7015a5cd60d59fd26629/final/App.js#L7

The InMemoryCache class resides in a different package from the Apollo Client core. Make sure the apollo-cache-inmemory package is installed in your project

https://www.apollographql.com/docs/react/caching/cache-configuration/

https://github.com/javascripteverywhere/web/blob/26319b2669bb9b7e80ae7015a5cd60d59fd26629/final/App.js#L45 => Uncaught TypeError: cache.writeData is not a function at Object.parcelRequire.App.js.react (App.js:45)

ivonakov avatar Mar 28 '20 21:03 ivonakov

For anyone who comes across this issue, we discuss it in more detail here: https://spectrum.chat/jseverywhere/general/chapter-15-web-authentication-and-state-issue-with-cache-writedata~998a84e5-9caa-4dab-bccb-d97fea79c1b1

The tl;dr summary is: If you are using this repo as a starter project as shown in the book, you should not experience this issue.

However, when using the latest version of Apollo the two packages need to be installed separately:

import { ApolloClient, ApolloProvider, createHttpLink } from '@apollo/client';
import { InMemoryCache } from 'apollo-cache-inmemory';

Otherwise, the code should be the same.

Hopefully that helps!

ascott1 avatar May 04 '20 20:05 ascott1

I think this is related to this issue, @appolo/client removed client.writeData in version 3.0.0-beta.48 so the signIn code is no longer working. I tried this workaround

client.cache.writeData({ data: { isLoggedIn: true } });

but now the problem is that

 const { loading, error, data } = useQuery(IS_LOGGED_IN);

in PrivateRoute is returning stale data after the succesful login redirect so I need to log in twice

cip123 avatar May 15 '20 19:05 cip123