阅读 219

ReactQuery(四) Queries [译]

Query Basics (查询基础)

query是对应唯一key的异步数据源的声明性依赖。 query可以与任何基于 Promise 的方法(包括 GET 和 POST 方法)一起使用,以从服务器获取数据。 如果您的方法修改了服务器上的数据,建议改用 Mutations。

要订阅组件或自定义hooks中的query,调用 useQuery 钩子函数请确保以下几点:

  • 唯一的key对应一个query

  • 一个返回Promise的函数

 import { useQuery } from 'react-query'
 
 function App() {
   const info = useQuery('todos', fetchTodoList)
 }复制代码

这个唯一的key用于:定义请求,缓存请求和在应用中获取对应的query。

useQuery返回的query值包含对应请求返回的数据模板和其他有用的信息:

 const result = useQuery('todos', fetchTodoList)复制代码

这个query:result结果包含了一些值得注意关键的状态,了解结果包含的数据模板可以有效提供工作效率。关于query在任意时刻只能处于以下状态:

  1. isLoadingstatus === 'loading' - query没有数据,当前正在获取。

  2. isError status === 'error' - 查询遇到错误

  3. isSuccess status === 'success' - 查询成功且数据可用。

  4. isIdle status === 'idle' - 查询当前被禁用。

除了这些主要状态之外,还可以根据查询的状态获得更多信息:

  1. error - 如果查query处于 isError 状态,则错误可通过 error 属性获得。

  2. data - 如果query处于成功状态,则数据可通过 data 属性获得。

  3. isFetching - 在任何状态下,如果query在任何时间正在获取(包括后台重新获取),则 isFetching 将为真。

对于大多数查询,通常检查 isLoading 状态就足够了,然后是 isError 状态,最后,假设数据可用并呈现成功状态:

 function Todos() {
   const { isLoading, isError, data, error } = useQuery('todos', fetchTodoList)
 
   if (isLoading) {
     return <span>Loading...</span>
   }
 
   if (isError) {
     return <span>Error: {error.message}</span>
   }
 
   // We can assume by this point that `isSuccess === true`
   return (
     <ul>
       {data.map(todo => (
         <li key={todo.id}>{todo.title}</li>
       ))}
     </ul>
   )
 }复制代码

如果这些状态不喜欢布尔值的直接形式,当然也可以使用全等运算符判断是否处在对应的状态的形式:

function Todos() {
   const { status, data, error } = useQuery('todos', fetchTodoList)
 
   if (status === 'loading') {
     return <span>Loading...</span>
   }
 
   if (status === 'error') {
     return <span>Error: {error.message}</span>
   }
 
   // also status === 'success', but "else" logic works, too
   return (
     <ul>
       {data.map(todo => (
         <li key={todo.id}>{todo.title}</li>
       ))}
     </ul>
   )
 }


作者:Transon
链接:https://juejin.cn/post/7038268078320255006

 伪原创工具 SEO网站优化  https://www.237it.com/ 


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐