Apollo 客户端:在清除或重置存储时保留/重置默认值

Posted

技术标签:

【中文标题】Apollo 客户端:在清除或重置存储时保留/重置默认值【英文标题】:Apollo Client: Keep/Reset defaults on clearing or resetting store 【发布时间】:2019-04-17 16:14:24 【问题描述】:

我在本地使用apollo-link-state 存储错误,但清除缓存后出现以下错误。

我已在 apollo 客户端配置选项中将 errors 的默认值设置为空数组 []

但是,在apolloClient.cache.reset()apolloClient.store.reset() 之后,似乎我丢失了所有默认值,导致此错误:

任何想法如何解决这个问题?

【问题讨论】:

【参考方案1】:

使用 Apollo 2.x,您只需执行以下操作:

cache.writeData(data : defaultData );

client.onResetStore(() => 
  cache.writeData(data : defaultData );
);

假设您在此代码上方设置了缓存的默认数据。

【讨论】:

【参考方案2】:

来自docs:

有时您可能需要重置应用程序中的存储,例如当用户注销时。如果您在应用程序的任何位置调用 client.resetStore,您将需要再次将默认值写入存储。 apollo-link-state 为您公开了一个 writeDefaults 函数。要将回调注册到 Apollo 客户端,请调用 client.onResetStore 并传入 writeDefaults。

所以你可以这样做:

const cache = new InMemoryCache()
const link = withClientState( cache, resolvers, defaults )

const client = new ApolloClient(
  cache,
  link,
)

client.onResetStore(stateLink.writeDefaults)

【讨论】:

谢谢!一开始没用,看来writeDefaults有问题。通过将任何Query 添加到客户端类型定义来解决..

以上是关于Apollo 客户端:在清除或重置存储时保留/重置默认值的主要内容,如果未能解决你的问题,请参考以下文章

清除网格存储 baseParams 或重置它们?

使用 Apollo 客户端时在 Redux 中调度操作会导致 Apollo 客户端重置查询

寻找重置或清除 DataReader 的方法

如何重置 Apollo 客户端的 useMutation 钩子

Gatsby Link 重置 Apollo 客户端

在更改过滤器时清除或重置 wordpress 帖子分页