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 客户端:在清除或重置存储时保留/重置默认值的主要内容,如果未能解决你的问题,请参考以下文章
使用 Apollo 客户端时在 Redux 中调度操作会导致 Apollo 客户端重置查询