Reactjs 阿波罗';s proxy.writeQueries清空缓存(是否有错误?)
我正在开发一个聊天应用程序,当用户发送消息时,我试图添加一个乐观的响应。然而,当结合使用变异的乐观响应和更新选项时,我遇到了一个问题 当我使用proxy.writeQuery将乐观响应负载写入缓存时(在将其与缓存的先前内容合并后),缓存变为空,直到客户端接收到实际的变异响应(和负载) 有一点信息,缓存一开始应该是空的,因为我还没有向它写入任何数据(还没有可用的db/后端)。然而,即使在我将一些数据写入proxy.readQuery之后(用户发送的数据被发送回客户端),proxy.readQuery仍然会在收到实际的变异响应之前生成一个空缓存 这是我的密码Reactjs 阿波罗';s proxy.writeQueries清空缓存(是否有错误?),reactjs,graphql,apollo,react-apollo,apollo-client,Reactjs,Graphql,Apollo,React Apollo,Apollo Client,我正在开发一个聊天应用程序,当用户发送消息时,我试图添加一个乐观的响应。然而,当结合使用变异的乐观响应和更新选项时,我遇到了一个问题 当我使用proxy.writeQuery将乐观响应负载写入缓存时(在将其与缓存的先前内容合并后),缓存变为空,直到客户端接收到实际的变异响应(和负载) 有一点信息,缓存一开始应该是空的,因为我还没有向它写入任何数据(还没有可用的db/后端)。然而,即使在我将一些数据写入proxy.readQuery之后(用户发送的数据被发送回客户端),proxy.readQuer
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负载和实际的突变响应负载应该是相同的,并且不会清空缓存
我使用的是错误的还是错误?共享同一个GraphQL文档但具有不同变量的查询分别存储在缓存中。毕竟,如果变量不同,查询结果可能会不同。这意味着,当我们从缓存读取和读取缓存时(分别使用
readQuery
和writeQuery
),我们需要指定使用的变量。在代码中,writeQuery
忽略了变量,因此在读取时不会写入缓存项