javascript - React Apollo 客户端的 Mutation 组件中的 refetchQueries 不起作用?
问题描述
<Query />
我的Home.js
文件中有一个
主页.js
<Query
query={GET_TODOS_BY_PRODUCT}
variables={{ id: state.get("selectedProduct.id"), completed: true }}
>
{({ data: { product } }) => {
return <Main todos={product.todos} hashtag={product.hashtag} />;
}}
</Query>
在我的Main.js
文件中,我有<Mutation />
组件-
主.js
<Mutation
key={v4()}
mutation={SWITCH_SELECTED_PRODUCT}
refetchQueries={() => {
console.log("refetchQueries", product.id);
return {
query: GET_TODOS_BY_PRODUCT,
variables: { id: product.id }
};
}}
>
{switchSelectedProduct => (
<Product
onClick={() => {
switchSelectedProduct({
variables: { id: product.id, name: product.name }
});
}}
highlight={
data.selectedProduct
? product.name === data.selectedProduct.name
: i === 0
}
>
<Name>{product.name}</Name>
</Product>
)}
</Mutation>
在组件switchSelectedProduct
内部调用时<Mutation />
,它会在refetchQueries
我看到console.log("refetchQueries", product.id);
语句时运行,但我没有在文件中的<Query />
组件中看到更新的结果。Home.js
如何告诉<Query />
组件在文件中运行Home.js
时得到通知?refetchQueries
Main.js
有什么建议么?
解决方案
来自 docs: refetchQueries: (mutationResult: FetchResult) => Array<{ query: DocumentNode, variables?: TVariables} | string>
,因此您可能需要返回一个数组而不仅仅是对象
<Mutation
key={v4()}
mutation={SWITCH_SELECTED_PRODUCT}
refetchQueries={() => {
console.log("refetchQueries", product.id)
return [{
query: GET_TODOS_BY_PRODUCT,
variables: { id: product.id }
}];
}}
>
推荐阅读
- swift - 检测 NSTabview 何时在 Swift 中重新加载
- vue.js - 依赖升级后,bootstrap 和 bootstrap-vue 不再工作
- swift - DataTaskPublisher 未执行
- express - 如何使用下一个 js 和 firebase 在 getServerSideProps 中检索会话 cookie
- php - Laravel 项目中的空白登录页面
- sql - 我的回答与问题上的不一样
- node.js - 通过某些条件检索 mongodb 文档
- linux-kernel - open-file-description 表不像 Tanenbaum 在 Ubuntu 中描述的那样?
- python - 在 Python 的同一个类中从一个方法调用列表到另一个方法
- java - 使用时区偏移值解析 ZonedDateTime 字符串