Reactjs 阿波罗';s proxy.writeQueries清空缓存(是否有错误?)

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

我正在开发一个聊天应用程序,当用户发送消息时,我试图添加一个乐观的响应。然而,当结合使用变异的乐观响应和更新选项时,我遇到了一个问题

当我使用proxy.writeQuery将乐观响应负载写入缓存时(在将其与缓存的先前内容合并后),缓存变为空,直到客户端接收到实际的变异响应(和负载)

有一点信息,缓存一开始应该是空的,因为我还没有向它写入任何数据(还没有可用的db/后端)。然而,即使在我将一些数据写入proxy.readQuery之后(用户发送的数据被发送回客户端),proxy.readQuery仍然会在收到实际的变异响应之前生成一个空缓存

这是我的密码

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
忽略了变量,因此在读取时不会写入缓存项