dea*_*904 6 javascript apollo reactjs graphql react-apollo
我有一个<Query />
在我的Home.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>
Run Code Online (Sandbox Code Playgroud)
在我的Main.js
文件中,我有<Mutation />
组件-
<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>
Run Code Online (Sandbox Code Playgroud)
当switchSelectedProduct
在<Mutation />
组件内部被调用时,它将refetchQueries
按我看到的console.log("refetchQueries", product.id);
语句运行,但是<Query />
在Home.js
文件中的组件中看不到更新的结果。
如何在文件中运行<Query />
组件时Home.js
通知组件通知?refetchQueries
Main.js
有什么建议么?
小智 10
从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 }
}];
}}
>
Run Code Online (Sandbox Code Playgroud)
我在一些帮助下解决了它。显然存在一个错误,refetchQueries
因为它不更新其他组件的数据。但refetchQueries
根本不需要。
我Home
用另一个组件包装了我的组件,Query
例如:
<Query
query={GET_ALL_PRODUCTS}
variables={{ id: state.get("user.id") }}
>
{({ data: { user } }) => {
const { id, name } = user.products ? user.products[0] : [];
return <Main id={id} name={name} />;
}}
</Query>
Run Code Online (Sandbox Code Playgroud)
然后我还Main
用另一个组件包装了我的组件Query
,以便在应用突变时它会改变状态。refetchQueries
这样你就根本不需要了。当执行来自另一个或相同组件时,只需包装您的Mutation
或Query
组件即可。Mutation
<Query query={GET_SELECTED_PRODUCT}>
<Mutation
key={v4()}
mutation={SWITCH_SELECTED_PRODUCT}
>
{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>
</Query>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6277 次 |
最近记录: |