React-Query介绍以及简单使用

2022-07-10  本文已影响0人  Poppy11

1.为什么有react-query?

而React-Query的出现正是解决了我们以上问题,当然我觉得最重要的是该库增加了缓存的概念,并且与Next.JS适配的很好。也提供了很多便利的API(例如无限加载,分页等等,都不需要开发者自己再去维护很多状态)可以让我们前端开发更高效,性能也更好。最重要的是,让我们开发者少写代码。并且React-Query和Redux的配合使用,可以让我们保持服务器和客户端状态分开

2.React-Query是什么?

React Query 因其极大地简化了 React 应用程序中的数据获取而受到许多人的喜爱。但是它并不是数据获取库,它应该叫异步状态管理器,它可以管理任何形式的异步状态——只要它得到一个 Promise。

3.查询的键值(query-keys)

从本质上讲,React Query 基于查询键值为您管理查询缓存。 只要键值是可序列化的,并且对查询的数据来说。它是唯一的,就可以使用它。虽然支持用字符串,但还是建议使用数组形式,因为内部最终还是会转化成数组。

  useQuery(['todos', state], () => fetchTodos(state))
export const useTodos = () => useQuery(['todos'], fetchTodos)

function ComponentOne() {
  const { data } = useTodos()
}

function ComponentTwo() {
  const { data } = useTodos()
}

const SEARCH_DEMO_RESULT = 'search_demo_result';

export {SEARCH_DEMO_RESULT}

4.自动请求

React Query 很聪明,它会选择策略点来触发重新获取数据。

5.staleTime和catchTime

6.数据转换

数据转换也是前端经常遇到的问题,因为API返回的数据可能不是我们刚好能用的,react-query也提供了转换器,并且也只在有数据的时候才会被调用。

  useQuery(['todos'], fetchTodos, {
    select: (data) => data.map((todo) => todo.name.toUpperCase()),
  })

因为每次渲染都会执行,如果转换数据的方法开销比较大,建议使用useCallback将select函数缓存起来。

useQuery(['todos'], fetchTodos, {
    select: useCallback(
      (data: Todos) => data.map((todo) => todo.name.toUpperCase()),
      []
    ),

7.initialData和placeholderData

初始化数据,也就是数据没有缓存时直接展示的内容,当缓存中有该数据时,则不会生效。

8.NextJS中使用React-Query,初始化数据

NextJS在React-Query的使用

如何读取缓存中的数据?

const queryClient = useQueryClient();
queryClient.getQueriesData([SEARCH_DEMO_RESULT])
上一篇下一篇

猜你喜欢

热点阅读