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

How to use useQuery hook from ReactQuery to update state?

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

1个答案

1

在React Query中,useQuery 钩子主要用于获取数据并将数据状态(如加载状态、错误状态、数据本身)保存在本地。如果你的问题是关于如何使用 useQuery 来“更新”数据的状态,这通常涉及到数据的获取和缓存,而不是直接的状态管理如同 useStateuseReducer

使用 useQuery 获取数据

useQuery 钩子接收一个唯一的键和一个异步查询函数,用来获取数据。这个钩子返回一个对象,包含了数据(data)、错误信息(error)、加载状态(isLoading)、以及其他控制查询状态的字段和方法。

基本示例代码

jsx
import { useQuery } from 'react-query'; function fetchUserData(userId) { return fetch(`https://api.example.com/users/${userId}`) .then(res => res.json()); } function UserProfile({ userId }) { const { data, error, isLoading } = useQuery(['user', userId], () => fetchUserData(userId)); if (isLoading) return <div>Loading...</div>; if (error) return <div>An error occurred: {error.message}</div>; return ( <div> <h1>{data.name}</h1> <p>Email: {data.email}</p> </div> ); }

更新数据和状态

虽然 useQuery 本身是用来读取和缓存数据的,但你可以使用 useQuery 钩子返回的 refetch 方法来重新触发查询,这在某种意义上可以被看作是更新数据状态。当底层数据可能改变时,这特别有用。

示例:强制重新获取数据

jsx
function UserProfile({ userId }) { const { data, error, isLoading, refetch } = useQuery(['user', userId], () => fetchUserData(userId)); return ( <div> {isLoading ? ( <div>Loading...</div> ) : error ? ( <div>An error occurred: {error.message}</div> ) : ( <> <h1>{data.name}</h1> <p>Email: {data.email}</p> <button onClick={() => refetch()}>Refresh Data</button> </> )} </div> ); }

在这个示例中,点击“Refresh Data”按钮会调用 refetch 方法,这将重新运行数据查询函数,如果数据源有更新,界面将展示最新的数据。

总结

  • useQuery 主要用于数据的获取和缓存,而不是直接的状态更新。
  • 通过 refetch 方法可以重新触发查询,间接实现数据状态的更新。
  • 真正的状态管理(如用户输入)通常会结合使用其他钩子如 useStateuseContext
2024年8月5日 11:16 回复

你的答案