我有一个Main
组件,可显示待办事项列表
还有Sidebar
组件,其中有很多看起来像
Sidebar
组件之外的右侧是Main
组件。
当我在Input
框中添加待办事项时,refetchQueries
有效,但是当我在Product
中选择新的Sidebar
时,它不会重新呈现待办事项列表,即Main
组件。
它会调用服务器并收到完美的响应,但不会重新渲染。
我认为原因是它在不同的组件中。 This issue正是我要面对的。
完整的代码是开源的,可在https://github.com/deadcoder0904/wip-desktop
获得相关部分是-
refetchQueries works here,因为它被<Query query={GET_TODOS_BY_PRODUCT} variables={{ id }} />
组件包裹
<Query query={GET_TODOS_BY_PRODUCT} variables={{ id }}>
<Mutation
mutation={CREATE_TODO}
refetchQueries={[
{
query: GET_TODOS_BY_PRODUCT,
variables: {
id: state.get("selectedProduct.id")
}
}
]}
>
{mutate => (
<Input
placeholder="Add Todo..."
value={input}
onChange={this._onInputChange}
onKeyPress={e => this._onKeyPress(e, mutate)}
/>
)}
</Mutation>
</Query>
Sidebar.js中的 refetchQueries doesn't work here,因为它没有用<Query query={GET_TODOS_BY_PRODUCT} variables={{ id }} />
包裹
<Mutation
key={v4()}
mutation={SWITCH_SELECTED_PRODUCT}
refetchQueries={[
{
query: GET_TODOS_BY_PRODUCT,
variables: {
id: product.id
}
}
]}
>
{mutate => {
const highlightedProduct = selectedProduct
? product.name === selectedProduct.name
: i === 0;
return (
<Product
onClick={() => {
if (highlightedProduct) return;
mutate({
variables: { id: product.id, name: product.name }
});
}}
>
<Name highlight={highlightedProduct}>
{product.name}
</Name>
</Product>
);
}}
</Mutation>
当同一组件中没有发生突变时,如何使用refetchQueries
?
答案 0 :(得分:0)
在类似情况下,我处理此问题的方法是在与查询关联的组件中使用this.props.data.refetch
。当Mutation在其他组件中更新时,我使用了refetchQueries
。希望对您有所帮助。