在Apollo中,查询或突变失败后,不会将数据存储在缓存中。然而,你可以通过使用cacheRedirects
来自定义缓存行为,将查询结果存储在缓存中并在查询/突变失败时进行访问。
以下是一个使用cacheRedirects
的示例代码:
import { ApolloClient, InMemoryCache, ApolloLink, HttpLink, gql } from "@apollo/client";
// 创建自定义缓存链接
const cacheRedirects = {
Query: {
// 在这里定义查询的缓存重定向规则
myQuery: (_, { id }, { getCacheKey }) => getCacheKey({ __typename: "MyType", id }),
},
};
// 创建Apollo客户端
const client = new ApolloClient({
link: ApolloLink.from([
// 创建HTTP链接
new HttpLink({ uri: "your_graphql_endpoint" }),
]),
cache: new InMemoryCache({ cacheRedirects }),
});
// 定义查询
const MY_QUERY = gql`
query MyQuery($id: ID!) {
myQuery(id: $id) {
id
name
}
}
`;
// 发起查询
client.query({ query: MY_QUERY, variables: { id: "123" } })
.then((result) => {
console.log(result.data.myQuery);
})
.catch((error) => {
// 处理查询失败的情况
console.error(error);
});
在上面的代码中,我们通过在cacheRedirects
中定义了一个缓存重定向规则来将查询的结果存储在缓存中。当执行client.query
时,Apollo客户端会首先尝试从缓存中获取数据,如果缓存中不存在则会发送实际的查询请求。如果查询失败,你可以在catch
块中处理该错误。
请注意,上述示例中的your_graphql_endpoint
应该替换为你的GraphQL端点的实际URL。