在Apollo客户端上更新缓存

时间:2018-10-29 12:36:23

标签: reactjs graphql react-apollo apollo-client

我正在使用Apollo Dev Tools for Chrome,但我似乎不明白如何更新缓存。

  1. 每个查询后的缓存都是相同的,即使它呈现正确的数据也是如此。

  2. 我正在开发一个CRUD应用程序,在删除时我希望页面显示在服务器上所做的更改。在执行删除数据库中某个项目的突变后,我也想从缓存中删除该项目。

    // mutation
    const DELETE_ELEMENT_MUTATION = gql`
      mutation DELETE_ELEMENT_MUTATION($id: String!) {
        deleteElement(id: $id)
      }
    `;
    
    // update cache
    update = (cache, payload) => {
      const data = cache.readQuery({query: queryAllElements});
      const result = data.allElements.filter(element => {
        const elementId = script._id;
        const compareId = JSON.parse(payload.data.deleteElement).id;
    
        return elementId !== compareId;
      });
    
      cache.writeQuery({query: queryAllElements, data: result});
    };
    
    <Mutation
      mutation={DELETE_ELEMENT_MUTATION}
      variables={{id: id}}
      update={this.update}
    >
      {(deleteElement) => (
        <Icon
          onClick={() => {
            deleteElement();
          }}
        />
      )}
    </Mutation>
    

更新后,缓存不会更新。

编辑:已更改

cache.writeQuery({query: getAllElements, data: result}); 
// to 
cache.writeQuery({query: queryAllElements, data: result});

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。原来我在缓存中更新了错误的密钥。

solution