如何 return react-query 中来自 useQuery 的请求函数

How to return a request function from useQuery in react-query

我有一个 React 挂钩,return 是一个调用 API

的请求函数

它有以下代码:

export const useGetFakeData = () => {
  const returnFakeData = () =>
    fetch('https://fake-domain.com').then(data => console.log('Data arrived: ', data))

  return returnFakeData
}

然后我在类似这样的组件中使用这个钩子

const getFakeData = useGetFakeData()

useEffect(() => getFakeData(), [getFakeData])

当我们需要return来自自定义钩子的请求函数时,如何在react-query中实现这种效果?

感谢任何建议!

如果你想使用命令式的方式请求数据,你可以使用useMutation hook。从钩子返回的 data 是突变调用的最新解析值:

const [mutate, { data, error }] = useMutation(handlefunction);

useEffect(() => {
  mutate(...);
}, []);

我认为您只是在寻找标准的反应查询行为,即在组件安装时触发请求(除非您禁用查询)。在您的示例中,这只是:

export const useGetFakeData = () =>
  useQuery('fakeData', () => fetch('https://fake-domain.com'))
}


const { data } = useGetFakeData()

请注意,这只是一个简单的最小示例:

深入研究文档,我发现 useQuery 钩子中的 React-Query 提供了一个 refetch() 函数。

在我的例子中,我只是将 属性 enabled 设置为 false(只是为了不自动调用 mount 时的函数),只是 return 像这样的请求函数

export const useGetFakeData = () => {
  const { refetch } = useQuery<void, Error, any>({
    queryFn: () =>
      fetch('https://fake-domain.com').then(data => console.log('Data arrived: ', data)),
    queryKey: 'fake-data',
    enabled: false,
  })

  return refetch
}