乐闻世界logo
搜索文章和话题

How can I call ` useQuery ` from react-query in conditionally

4 个月前提问
4 个月前修改
浏览次数34

1个答案

1

在React中使用React Query的useQuery钩子时,通常我们会直接在组件中调用它来获取数据。但是在某些情况下,我们可能需要根据一定的条件来决定是否执行这个钩子。由于React的Hooks有一个规则:不可以在条件语句中调用Hooks(也就是不能在if语句、for循环中直接使用Hooks),我们需要使用一些技巧来实现条件调用。

使用enabled选项

React Query的useQuery提供了一个非常有用的选项叫做enabled,通过这个选项,我们可以控制查询是否应该自动运行。如果enabledfalse,则查询不会自动触发。

例子:

假设我们有一个组件,需要根据用户是否点击了一个按钮来决定是否去加载数据。

jsx
import React, { useState } from 'react'; import { useQuery } from 'react-query'; function MyComponent() { const [shouldFetch, setShouldFetch] = useState(false); const { data, error, isLoading } = useQuery('myData', fetchData, { enabled: shouldFetch }); function fetchData() { return fetch('/api/data').then(res => res.json()); } return ( <div> <button onClick={() => setShouldFetch(true)}>Load Data</button> {isLoading && <p>Loading...</p>} {error && <p>Error occurred: {error.message}</p>} {data && <div>{JSON.stringify(data)}</div>} </div> ); }

在这个例子中,useQuery将只有在shouldFetchtrue时才会运行。这可以通过点击按钮来改变shouldFetch的状态,从而触发查询。

小结

使用enabled选项是一种非常灵活的方式来控制React Query的useQuery的执行时机。这种方式遵守了React的Hooks规则,同时允许开发者在适当的时候进行数据的获取。这种方法特别适合那些依赖于某些条件或前置操作的数据加载需求。

2024年8月5日 11:30 回复

你的答案