在 React Query 中,useQuery
是一个非常强大的钩子,它用于异步获取数据并管理这些数据的状态(如加载、错误和缓存等)。如果您需要在某些条件下重新请求或刷新接口,React Query 提供了多种方法来实现这一点。以下是一些常用的方法:
1. 使用 refetch
方法
当您使用 useQuery
钩子时,它会返回一个对象,其中包括一个 refetch
函数。您可以在需要的时候调用这个函数来重新发起请求。这是最直接的一种方式。
javascriptconst { data, error, isLoading, refetch } = useQuery('todos', fetchTodos); // 当某个事件发生时,调用 refetch <button onClick={() => refetch()}>刷新数据</button>
2. 配置 refetchOnWindowFocus
这是一个配置选项,可以在创建查询时设置。此选项使得每当窗口获得焦点时,查询会自动重新请求数据。这对于想要应用数据保持最新非常有用。
javascriptconst { data } = useQuery('todos', fetchTodos, { refetchOnWindowFocus: true });
3. 使用 refetchInterval
此选项允许您设置一个时间间隔,React Query 将在这个间隔中自动重新请求数据。
javascriptconst { data } = useQuery('todos', fetchTodos, { refetchInterval: 60000 // 每分钟刷新一次数据 });
4. 结合 useEffect
钩子
如果您想在某些特定的依赖项变化时重新请求数据,可以使用 React 的 useEffect
钩子结合 refetch
方法。
javascriptconst { data, refetch } = useQuery('todos', fetchTodos); useEffect(() => { refetch(); }, [someDependency]);
5. 使用 enabled
选项
通过控制 useQuery
的 enabled
选项,您可以控制查询的启动时机。例如,您可能希望在获取到某些必要数据后才启动查询。
javascriptconst { userId } = useUser(); const { data } = useQuery(['todos', userId], fetchTodosByUserId, { enabled: !!userId });
在这个例子中,只有当 userId
存在时,查询才会被执行。
结论
React Query 提供了多种灵活的方法来根据应用的需要重新请求或刷新数据。您可以根据具体场景选择最适合的方法。
2024年6月29日 12:07 回复