- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个聊天应用程序,我正在尝试在用户发送消息时添加一个乐观的响应。但是,当结合 useMutation 的 optimisticResponse 和更新选项时,我遇到了一个问题。
当我使用 proxy.writeQuery 将乐观响应负载写入缓存时(在将其与缓存的先前内容合并之后),缓存变为空,直到客户端收到实际的 Mutation 响应(和负载)。
一点信息,缓存在开始时应该是空的,因为我还没有向其中写入任何数据(还没有数据库/后端可用)。然而,即使我向其中写入了一些数据(用户发送的数据被发送回客户端),proxy.readQuery 在收到实际的 Mutation 响应之前仍然会产生一个空缓存
这是我的 mutation Hooks 代码
sendMessage({
variables: { message: messagePayload },
// set temporary message
optimisticResponse: {
sendMessage: {
...messagePayload,
message_id: randomID,
__typename: "message"
}
},
// Update local cache with new message
update: (proxy, { data: { sendMessage } }) => {
// Read the data from our cache for this query.
const existingData: any = proxy.readQuery({
query: getMessageListQuery,
variables: {
agentID: someID,
roomID: props.activeChat
}
});
// Push new data into previous data
existingData.messages.push(sendMessage)
// Write our data back to the cache with the new message in it
proxy.writeQuery({ query: getMessageListQuery, data: existingData })
// reading query here will yield an empty array
console.log(proxy.readQuery({
query: getMessageListQuery,
variables: {
agentID: someID,
roomID: props.activeChat
}
}))
}
})
从我看过的教程来看,编写 optimisticResponse payload 和实际的 Mutation 响应 payload 应该是一样的,并且不会清空缓存。
我是用错了还是这是一个错误?
最佳答案
共享同一个 GraphQL 文档但具有不同变量的查询被单独存储在缓存中。毕竟,如果变量不同,查询结果可能会有所不同。这意味着当我们从缓存读取和读取到缓存时(分别使用 readQuery
和 writeQuery
),我们需要指定使用的变量。在您的代码中,writeQuery
省略了变量,因此您不会在读取时写入缓存条目。
关于reactjs - Apollo 的 proxy.writeQueries 清空缓存(是否有错误?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57917286/
所以我正在关注 https://www.howtographql.com/react-apollo/6-more-mutations-and-updating-the-store/ 上的 graphq
我有一个创建新卡片对象的突变,我希望它应该在更新后添加到用户界面。缓存、Apollo Chrome 工具和控制台日志记录反射(reflect)了更改,但 UI 并非没有手动重新加载。 const [
我正在构建一个聊天应用程序,我正在尝试在用户发送消息时添加一个乐观的响应。但是,当结合 useMutation 的 optimisticResponse 和更新选项时,我遇到了一个问题。 当我使用 p
根据本地状态管理的 docs,可以同时使用 writeData 和 writeQuery 将数据附加到缓存中。 这里的最佳做法是什么?什么时候一个? 最佳答案 来自 the documentation
使用 useMutation() 后,缓存会更新,但 Home 组件中的 useQuery() 不会更新。 我尝试使用不同的fetchPolicy。我可以在 Apollo 开发工具中看到新帖子,但需要
我在平面列表中具有以下按钮,可触发graphql突变,在突变后,我执行writeQuery以更新本地缓存(存储)。在变异的更新函数中,我正在更新缓存中的两个字段。基本上,当用户触摸“赞”按钮时,我会将
我是一名优秀的程序员,十分优秀!