可以使用Apollo Client的writeQuery
和writeFragment
方法手动更新缓存并定义类型策略。示例如下:
import { gql } from 'apollo-boost';
import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
const client = new ApolloClient({
cache: new InMemoryCache(),
});
// 定义查询和类型
const GET_DATA = gql`
query GetData {
data {
id
name
age
}
}
`;
type IData = {
data: {
id: string;
name: string;
age: number;
}[];
};
// 先执行一次查询,让数据写入缓存
client.query({
query: GET_DATA,
});
// 定义类型策略
client.cache.writeQuery({
query: GET_DATA,
data: {
data: [
{
__typename: 'Person',
id: '1',
name: 'Alice',
age: 21,
},
{
__typename: 'Person',
id: '2',
name: 'Bob',
age: 25,
},
],
},
});
// 更新缓存并触发查询结果更新
client.cache.writeQuery({
query: GET_DATA,
data: {
data: [
{
__typename: 'Person',
id: '1',
name: 'Alice',
age: 22,
},
{
__typename: 'Person',
id: '2',
name: 'Bob',
age: 25,
},
],
},
});
使用writeQuery
和writeFragment
方法可以手动更新缓存并定义类型策略。需要注意的是,要先执行一次查询让数据写入缓存,才能使用writeQuery
方法更新缓存。