Apollo 默认情况下不会自动更新缓存中的嵌套子字段。但可以使用 update
函数来手动更新缓存。示例代码如下:
import { useMutation } from '@apollo/client';
import { MY_MUTATION } from './myQuery';
function MyComponent() {
const [myMutation] = useMutation(MY_MUTATION, {
update(cache, { data: { myMutation } }) {
// 获取缓存中的数据
const { someField, nestedField } = cache.readQuery({ query: MY_QUERY });
// 更新嵌套字段的值
const updatedNestedField = myMutation.updatedNestedField;
const newData = {
someField,
nestedField: {
...nestedField,
updatedNestedField,
},
};
// 写入缓存
cache.writeQuery({
query: MY_QUERY,
data: newData,
});
},
});
return (
);
}
在上述代码中,update
函数会在 mutation 完成后被调用。该函数接收两个参数:cache
和 data
。cache
参数可用于读取和写入缓存中的数据。data
参数是 mutation 返回的数据。在示例代码中,我们使用 readQuery
函数从缓存中读取数据,并通过手动更新嵌套字段的值来更新缓存。最后,我们使用 writeQuery
函数将更新后的数据写回到缓存中。