【发布时间】:2021-09-16 04:34:26
【问题描述】:
我想知道如何使用 react-query 从另一个同级组件重新获取查询。
假设我有组件 A
import {useQuery} from "react-query";
function ComponentA(){
const getData = async () => data //returns api data
const {data, refetch} = useQuery(["queryA"], async () => await getData())
return(
<div>
{data}
</div>
)}
在组件 B 中
import {useQuery, QueryClient} from "react-query";
function ComponentB(){
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: Infinity,
},
},
})
const refreshQueryFromComponentA = async () => {
await queryClient.refetchQueries(["queryA"], { active: true })
}
return(
<div>
<button onClick={refreshQueryFromComponentA}/>
</div>
)}
在 Page.js 中
import ComponentA from "./componentA";
import ComponentB from "./componentB";
function Page(){
return(
<div>
<ComponentA/>
<ComponentB/>
</div>
)}
当我在 ComponentB 中调用 refreshQueryFromComponentA 函数时,我看不到 ComponentA 中的查询刷新或网络选项卡中对后端的新调用。我也使用了正确的查询键,但我只能使用来自 useQuery 函数的 refetch() 函数重新获取 ComponentA 中的查询。
我认为我正在尝试做的事情是可能的,因为 react-query 使用上下文并且应该在整个应用程序中都可用。但也许我使用了错误的方法或误解了它。
提前谢谢大家!
【问题讨论】:
标签: javascript reactjs caching next.js react-query