Apollo Client Devtools 中的重复活动查询
Duplicate active queries in Apollo Client Devtools
我将 React 与 Apollo Client 3 和 Hasura 一起用作 GraphQL 服务器。
组件 ProductList
使用了一次 get_products
查询。
然后这个查询的两个精确副本被存储在 Apollo 缓存中,如 Apollo DevTools 中所示。
我的问题是 - 为什么缓存中会生成两个相同的查询而不是一个?
Apollo DevTools 结果
我的代码
import {
ApolloClient,
ApolloProvider,
InMemoryCache,
HttpLink,
gql,
useQuery,
} from "@apollo/client";
const client = new ApolloClient({
link: new HttpLink({
uri: "http://localhost:8080/v1/graphql",
}),
cache: new InMemoryCache(),
});
function App() {
return (
<div className="App">
<ApolloProvider client={client}>
<ProductList />
</ApolloProvider>
</div>
);
}
const ProductList = () => {
const GET_PRODUCTS = gql`
query get_products {
product {
id
name
__typename
}
}
`;
const { loading, error, data } = useQuery(GET_PRODUCTS);
if (loading) return <p>Loading ...</p>;
if (error) return <p> {error.message}</p>;
return (
<>
<h1>ProductList</h1>
<ul>
{data?.product.map((product: any) => {
return <li key={product.id}>{product.name}</li>;
})}
</ul>
</>
);
};
export default App;
这基本上是 Apollo Client what are active queries?
的重复
主要概念是 Active Queries 表示 运行 在您的 React 应用程序中安装的组件内部的查询。这并不意味着数据被缓存了两次,它意味着你的应用程序中有两个地方依赖于这个查询的结果。
如果缓存中的查询结果有更新,两地都会自动获取数据更新。
我将 React 与 Apollo Client 3 和 Hasura 一起用作 GraphQL 服务器。
组件 ProductList
使用了一次 get_products
查询。
然后这个查询的两个精确副本被存储在 Apollo 缓存中,如 Apollo DevTools 中所示。
我的问题是 - 为什么缓存中会生成两个相同的查询而不是一个?
Apollo DevTools 结果
我的代码
import {
ApolloClient,
ApolloProvider,
InMemoryCache,
HttpLink,
gql,
useQuery,
} from "@apollo/client";
const client = new ApolloClient({
link: new HttpLink({
uri: "http://localhost:8080/v1/graphql",
}),
cache: new InMemoryCache(),
});
function App() {
return (
<div className="App">
<ApolloProvider client={client}>
<ProductList />
</ApolloProvider>
</div>
);
}
const ProductList = () => {
const GET_PRODUCTS = gql`
query get_products {
product {
id
name
__typename
}
}
`;
const { loading, error, data } = useQuery(GET_PRODUCTS);
if (loading) return <p>Loading ...</p>;
if (error) return <p> {error.message}</p>;
return (
<>
<h1>ProductList</h1>
<ul>
{data?.product.map((product: any) => {
return <li key={product.id}>{product.name}</li>;
})}
</ul>
</>
);
};
export default App;
这基本上是 Apollo Client what are active queries?
的重复主要概念是 Active Queries 表示 运行 在您的 React 应用程序中安装的组件内部的查询。这并不意味着数据被缓存了两次,它意味着你的应用程序中有两个地方依赖于这个查询的结果。
如果缓存中的查询结果有更新,两地都会自动获取数据更新。