【发布时间】:2021-08-01 16:36:42
【问题描述】:
在 React-Query 中,我们可以使用 useQueries 钩子来执行并行查询(主要是使用 Promise.all):https://react-query.tanstack.com/guides/parallel-queries
每个查询都有一组我们可以使用的选项,其中一个是onSuccess,可以如下使用:
const data = useQueries([{
queryKey: 1,
queryFn: () => axios.get(...),
onSuccess: data => ... do something,
},
{
queryKey: 2,
queryFn: () => axios.get(...),
onSuccess: data => ... do something,
},
])
但我真正需要的是只有在所有查询都成功时才能执行操作。主要是:
Promise.all(fn).then(...)
然后使用该数据运行函数。
我想出了一些类似的东西
1 - 将所有成功的查询推送到useState()
onSuccess: (data) => setData((prevData) => [...prevData, data])
并设置一个useEffect:
useEffect(() => {
// run function
}, [data])
但这不起作用,因为每次查询成功时都会触发。可能会因为无限循环而中断。
2 - 为一切成功创造条件:
if (data.every(num => num.isSuccess === true)) {
// do something
}
这可能有效,但对我来说看起来很笨拙。想知道是否有更好、性能更高的方法。
【问题讨论】:
标签: javascript reactjs react-hooks react-query