Reactjsとapollo-clientを使用して、オンラインショップ用のカートを作成する必要があります。 localStorageでapolloクライアントを使用してデータを永続化するにはどうすればよいですか?
はい、localStorageを使用してApolloクライアントキャッシュを永続化できます。 apollo-cache-persist は、InMemoryCacheおよびHermesを含むすべてのApollo Client 2.0キャッシュ実装に使用できます。
Apollo GraphQL client を使用してローカル状態を管理する方法と apollo-cache-persist を使用してlocalStorageにキャッシュを永続化する方法を示す実際の例を次に示します。
import React from 'react';
import ReactDOM from 'react-dom';
import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { createHttpLink } from 'apollo-link-http';
import { ApolloProvider } from '@apollo/react-hooks';
import { persistCache } from 'apollo-cache-persist';
import { typeDefs } from './graphql/schema';
import { resolvers } from './graphql/resolvers';
import { GET_SELECTED_COUNTRIES } from './graphql/queries';
import App from './components/App';
const httpLink = createHttpLink({
uri: 'https://countries.trevorblades.com'
});
const cache = new InMemoryCache();
const init = async () => {
await persistCache({
cache,
storage: window.localStorage
});
const client = new ApolloClient({
link: httpLink,
cache,
typeDefs,
resolvers
});
/* Initialize the local state if not yet */
try {
cache.readQuery({
query: GET_SELECTED_COUNTRIES
});
} catch (error) {
cache.writeData({
data: {
selectedCountries: []
}
});
}
const ApolloApp = () => (
<ApolloProvider client={client}>
<App />
</ApolloProvider>
);
ReactDOM.render(<ApolloApp />, document.getElementById('root'));
};
init();
この例は my GitHub Repo にあります。
ちなみに、アプリは次のようになります。
そして、そのlocalStorageは、Chrome DevTools:
ドキュメント: https://github.com/apollographql/apollo-cache-persist
import { InMemoryCache } from 'apollo-cache-inmemory';
import { persistCache } from 'apollo-cache-persist';
const cache = new InMemoryCache({...});
// await before instantiating ApolloClient, else queries might run before the cache is persisted
await persistCache({
cache,
storage: window.localStorage,
});
// Continue setting up Apollo as usual.
const client = new ApolloClient({
cache,
...
});