【问题标题】:Apollo Client cache does not updateApollo 客户端缓存不更新
【发布时间】:2021-03-11 22:43:04
【问题描述】:

我正在使用 Apollo 服务器/客户端,缓存似乎不适用于更新突变。 (创建、删除)。服务器得到更新,但前端没有任何反应。我必须重新加载页面以显示新项目/显示项目更改。

我关注了Apollo docs,并模仿了他们的sandbox implementation。 如果您需要更多我的代码,请告诉我,谢谢。

这是我的代码:

      <form
        onSubmit={(e) => {
          e.preventDefault();
          createUser(
            {
              variables: {
                name: input.value,
                email: input.value,
                password: input.value
              }
            },
            {
              update(cache, { data: { createUser } }) {
                cache.modify({
                  fields: {
                    allUsers(existingUsers = []) {
                      const newUser = cache.writeFragment({
                        data: { createUser },
                        fragment: gql`
                          fragment NewUser on User {
                            name
                            email
                          }
                        `
                      });
                      return existingUsers.concat(newUser);
                    }
                  }
                });
              }
            }
          );
        }}
      >

【问题讨论】:

    标签: reactjs graphql apollo react-apollo


    【解决方案1】:

    您需要在writeFragment 方法中提供id 属性。这是文档上的示例:

    client.writeFragment({
      id: '5',
      fragment: gql`
        fragment MyTodo on Todo {
          completed
        }
      `,
      data: {
        completed: true,
      },
    });
    
    

    另外,writeFragment 返回void,所以你需要使用readFragment 来获取你想要的数据,或者只使用突变结果中可用的数据

    【讨论】:

    • 我现在在文档中看到了 - 用于更新缓存中的对象。我有点进一步,试图添加一个新对象。
    • 我想通了 - 我必须将它附加到实际的钩子上,而不是附加到钩子的调用上。
    猜你喜欢
    • 2021-07-30
    • 2019-04-02
    • 2017-03-18
    • 2021-09-16
    • 2020-02-03
    • 2021-04-04
    • 2021-01-18
    • 2021-04-21
    • 2020-11-03
    相关资源
    最近更新 更多