下面给出的是获取产品列表并将其存储在 apollo-client 本地缓存中的查询。它检索每个产品products
的列表和列表images
const GET_PRODUCTS_QUERY = gql`
query Products($cursor: String, $query: String, $imageCount: Int = 100) {
products(first: 9, after: $cursor, query: $query) {
edges {
cursor
node {
id
selected @client
title
description
images(first: $imageCount) {
edges {
node {
id
originalSrc
selected @client
}
}
}
}
}
}
}
`;
我有一堆products
with selected: true
,每个产品都会有一个或多个images
with selected: true
。
GET_PRODUCTS_QUERY
正在由ProductsList
获取产品并呈现产品的组件使用。这工作正常。当用户选择某个产品时,selected
在本地缓存中将其标记为 true,并且ProductsList
组件会重新呈现。到目前为止,一切都很好。
我有另一个组件,我需要使用它GET_PRODUCTS_QUERY
来获取产品,但只能从缓存中获取。该组件应该监听缓存中的产品列表,并且每当缓存中的某些内容发生变化时,它应该重新呈现。我尝试以下无济于事
export default () => {
const { data: productsData = {} } = useQuery(GET_PRODUCTS_QUERY, { fetchPolicy: "cache-only" });
const { selectedProducts = [] } = productsData;
//Render selected products
}
在初始渲染期间,查询被执行并且没有按预期返回。
- 在 ProductsList 获取产品列表并填充缓存后,我希望在侦听查询时调用渲染函数,但它没有发生
- 我通过更改其他一些道具来手动影响渲染,以便触发 useQuery。但是我仍然没有从缓存中得到任何产品,尽管它在那里。
谁能解释我在这里出错的地方?