我正在使用Apollo Dev Tools for Chrome,但我似乎不明白如何更新缓存。
每个查询后的缓存都是相同的,即使它呈现正确的数据也是如此。
我正在开发一个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});