reactjs - Apollo 客户端持久缓存不起作用
问题描述
我有一个带有阿波罗客户端的反应应用程序。当用户登录时,我可以查询客户端状态并检索用户但是,当我刷新页面时,不再设置用户数据。
正如你所看到的,我有我的index.js
文件,我在其中设置了客户端,然后将它传递给我ApolloProvider
的包裹我的整个应用程序的文件。
// index.js
const client = () => {
const cache = new InMemoryCache()
persistCache({
cache,
storage: window.localStorage
})
return new ApolloClient({
uri: graphQLUri,
credentials: 'include',
clientState: {
defaults: {
locale: "en-GB",
user: {
__typename: "User",
isLoggedIn: false,
username: "",
salesChannel: "",
fullName: ""
}
},
typeDefs: `
enum Locale {
en-GB
fr-FR
nl-NL
}
type Query {
locale: Locale
}
`
},
cache
})
}
ReactDOM.render(
<ApolloProvider client={client()}>
<App />
</ApolloProvider>,
document.getElementById("root")
)
我应该补充一点,当我window.localStorage
在刷新页面后登录时,我可以看到我登录的user
对象。当我在刷新页面后查询用户时,我只得到在 clientState 默认值中设置的默认值。
另外,我知道GET_USER
查询有效,因为在登录并将用户对象写入缓存后,GET_USER
查询运行并返回用户对象。
作为参考,我的GET_USER
查询是这样的:
gql`
{
user @client {
username
salesChannel
fullName
isLoggedIn
}
}
`
为什么用户对象在重新加载页面后没有保留在缓存中?
解决方案
显然更改了InMemoryCache
缓存writeQuery
并writeFragment
在重新加载页面后消失。
如果您重新加载您的环境,那么使用 writeQuery 和 writeFragment 所做的更改将会消失。
推荐阅读
- machine-learning - 难以理解权重矩阵或 theta 矩阵的维度是 3X4 吗?
- python - 在python中创建一个矩阵,使得每个元素都是一个四元数
- ios - 发布模式下的 Flutter iOS 推送通知问题
- cordova - 地图工具包不显示在手机上
- qt - Q_GADGET 未知方法返回类型
- c++ - 为什么会发生这种情况 c++
- javascript - 我如何将 blob / 任何二进制文件从 js 客户端传递到烧瓶服务器并正确解码
- javascript - 如何解决“道具`propmethod`的无效值
- 标记。”在另一个组件中使用 SubMenu 时
- node.js - 如何从nodejs中的模块访问任何功能?
- react-native - react native - 每次我应该怎么做
是输入,所以 无法重新渲染?