所以我有一个带有过滤器组件的表。在初始化时,它会调用 useQuery
来获取数据。从这个钩子中,我得到以下结果对象:{ data, loading, error, refetch }
.
假设,这些是初始化结果:
1. banana
2. apple
3. blue berry
4. pear
5. strawberry
在过滤器更改时,我使用带有新变量的 refetch
来获取更新数据。这一切正常。
所以我放入了过滤器:pp
并且它正确地返回:
1. apple
但是,在过滤器上单击 RESET(与 init 上的查询变量相同)时,它似乎出错了。它似乎不是使用请求的变量来获取,而是使用与先前查询相同的变量来获取;结果是点击 RESET 按钮只会返回与上次过滤器更改相同的数据。
过滤操作:重置,预期结果:
1. banana
2. apple
3. blue berry
4. pear
5. strawberry
过滤动作:RESET,实际结果:
1. apple
所以这是在过滤器更改时设置新的重新获取查询变量的代码:
const [refetchFilter, setRefetchFilter] = useState(null);
setRefetchFilter({
...getQueryVariables({
filterSet,
getPageCount: true,
offset: 0,
propertyId,
scopeFilterSet,
source: "useFilterRefetch",
}),
});
console.log("FILTER EVENT (to refetch)", filterSet);
这是使用新变量重新获取的 useEffect
监视 refetchFilter
状态:
export default function useFilterRefetch({ refetch, refetchFilter }) {
useEffect(() => {
if (refetchFilter) {
console.log("IM REFETCHING NEW FILTER STUFF");
refetch({ ...refetchFilter });
}
}, [refetchFilter]);
}
您可以在我的日志中看到 CORRECT 变量正在传递给 refetch 函数:
2 个扩展的过滤器对象是我们感兴趣的。第一个 (1) 是通过“ll”过滤“FIRST_NAME”,它工作正常;但是在 RESET (2) 上,整个 filterSet
对象被删除,它应该返回 init/default 数据,但在我的网络中,我们看到情况并非如此。
(2) 的网络,这是不正确的,它正在重复之前的查询变量,而不是使用它被调用的变量......什么???
仅供参考:我正在使用 apollo v2