React Query 入门:轻松管理数据请求

React Query 入门指南:简化 React 应用中的数据获取

React Query 的核心优势

React Query 是一个专为 React 应用设计的数据管理库,专注于简化数据获取、缓存和状态同步。它通过内置的缓存机制和自动后台刷新,显著减少冗余代码和手动状态管理。

React Query 的核心优势包括:

  • 自动缓存:数据请求结果自动缓存,避免重复请求。
  • 后台数据同步:自动在应用焦点变化或网络重连时更新数据。
  • 开发者工具:内置 DevTools,方便调试查询和缓存状态。

安装与基础配置

通过 npm 或 yarn 安装 React Query:

npm install @tanstack/react-query

在应用中配置 QueryClientQueryClientProvider

import { QueryClient, QueryClientProvider } from '@tanstack/react-query';

const queryClient = new QueryClient();

function App() {
  return (
    <QueryClientProvider client={queryClient}>
      <YourComponent />
    </QueryClientProvider>
  );
}

基本数据查询

使用 useQuery 钩子发起数据请求。以下示例从 API 获取用户数据:

import { useQuery } from '@tanstack/react-query';

function UserList() {
  const { data, isLoading, error } = useQuery({
    queryKey: ['users'],
    queryFn: () => fetch('/api/users').then(res => res.json()),
  });

  if (isLoading) return <div>Loading...</div>;
  if (error) return <div>Error: {error.message}</div>;

  return (
    <ul>
      {data.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}
  • queryKey:唯一标识查询的键,用于缓存管理。
  • queryFn:返回 Promise 的函数,用于实际数据请求。

数据修改与乐观更新

通过 useMutation 处理数据修改(如 POST、PUT 请求),并支持乐观更新:

import { useMutation, useQueryClient } from '@tanstack/react-query';

function AddUser() {
  const queryClient = useQueryClient();
  const mutation = useMutation({
    mutationFn: (newUser) => fetch('/api/users', {
      method: 'POST',
      body: JSON.stringify(newUser),
    }),
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ['users'] });
    },
  });

  const handleSubmit = () => {
    mutation.mutate({ name: 'New User' });
  };

  return <button onClick={handleSubmit}>Add User</button>;
}
  • invalidateQueries:使缓存失效,触发重新获取数据。

高级功能与优化

  1. 分页查询:通过 useInfiniteQuery 实现无限滚动或分页加载。
  2. 预加载数据:使用 prefetchQuery 提前加载用户可能访问的数据。
  3. 依赖查询:通过 enabled 选项控制查询的触发条件。

总结

React Query 通过抽象化数据管理的复杂性,让开发者更专注于业务逻辑。其核心功能如自动缓存、后台同步和开发者工具,使其成为现代 React 应用的理想选择。

BbS.okapop113.sbs/PoSt/1122_994967.HtM
BbS.okapop114.sbs/PoSt/1122_331640.HtM
BbS.okapop115.sbs/PoSt/1122_274916.HtM
BbS.okapop116.sbs/PoSt/1122_529074.HtM
BbS.okapop117.sbs/PoSt/1122_017927.HtM
BbS.okapop118.sbs/PoSt/1122_991004.HtM
BbS.okapop119.sbs/PoSt/1122_294343.HtM
BbS.okapop120.sbs/PoSt/1122_743661.HtM
BbS.okapop121.sbs/PoSt/1122_649144.HtM
BbS.okapop122.sbs/PoSt/1122_919419.HtM
BbS.okapop113.sbs/PoSt/1122_723181.HtM
BbS.okapop114.sbs/PoSt/1122_888666.HtM
BbS.okapop115.sbs/PoSt/1122_025681.HtM
BbS.okapop116.sbs/PoSt/1122_397965.HtM
BbS.okapop117.sbs/PoSt/1122_929881.HtM
BbS.okapop118.sbs/PoSt/1122_492653.HtM
BbS.okapop119.sbs/PoSt/1122_047571.HtM
BbS.okapop120.sbs/PoSt/1122_685054.HtM
BbS.okapop121.sbs/PoSt/1122_538545.HtM
BbS.okapop122.sbs/PoSt/1122_388113.HtM
BbS.okapop113.sbs/PoSt/1122_432572.HtM
BbS.okapop114.sbs/PoSt/1122_910931.HtM
BbS.okapop115.sbs/PoSt/1122_719314.HtM
BbS.okapop116.sbs/PoSt/1122_686595.HtM
BbS.okapop117.sbs/PoSt/1122_307006.HtM
BbS.okapop118.sbs/PoSt/1122_425989.HtM
BbS.okapop119.sbs/PoSt/1122_133881.HtM
BbS.okapop120.sbs/PoSt/1122_332225.HtM
BbS.okapop121.sbs/PoSt/1122_592062.HtM
BbS.okapop122.sbs/PoSt/1122_532701.HtM
BbS.okapop113.sbs/PoSt/1122_009536.HtM
BbS.okapop114.sbs/PoSt/1122_656241.HtM
BbS.okapop115.sbs/PoSt/1122_436793.HtM
BbS.okapop116.sbs/PoSt/1122_104044.HtM
BbS.okapop117.sbs/PoSt/1122_167534.HtM
BbS.okapop118.sbs/PoSt/1122_284604.HtM
BbS.okapop119.sbs/PoSt/1122_915900.HtM
BbS.okapop120.sbs/PoSt/1122_163722.HtM
BbS.okapop121.sbs/PoSt/1122_698225.HtM
BbS.okapop122.sbs/PoSt/1122_047411.HtM
BbS.okapop113.sbs/PoSt/1122_626107.HtM
BbS.okapop114.sbs/PoSt/1122_229903.HtM
BbS.okapop115.sbs/PoSt/1122_487450.HtM
BbS.okapop116.sbs/PoSt/1122_129163.HtM
BbS.okapop117.sbs/PoSt/1122_794672.HtM
BbS.okapop118.sbs/PoSt/1122_229686.HtM
BbS.okapop119.sbs/PoSt/1122_436097.HtM
BbS.okapop120.sbs/PoSt/1122_910533.HtM
BbS.okapop121.sbs/PoSt/1122_360860.HtM
BbS.okapop122.sbs/PoSt/1122_028188.HtM
BbS.okapop113.sbs/PoSt/1122_052825.HtM
BbS.okapop114.sbs/PoSt/1122_073566.HtM
BbS.okapop115.sbs/PoSt/1122_883008.HtM
BbS.okapop116.sbs/PoSt/1122_501082.HtM
BbS.okapop117.sbs/PoSt/1122_458758.HtM
BbS.okapop118.sbs/PoSt/1122_332360.HtM
BbS.okapop119.sbs/PoSt/1122_828499.HtM
BbS.okapop120.sbs/PoSt/1122_276348.HtM
BbS.okapop121.sbs/PoSt/1122_395514.HtM
BbS.okapop122.sbs/PoSt/1122_230556.HtM
BbS.okapop113.sbs/PoSt/1122_437590.HtM
BbS.okapop114.sbs/PoSt/1122_584791.HtM
BbS.okapop115.sbs/PoSt/1122_497378.HtM
BbS.okapop116.sbs/PoSt/1122_922163.HtM
BbS.okapop117.sbs/PoSt/1122_819548.HtM
BbS.okapop118.sbs/PoSt/1122_098323.HtM
BbS.okapop119.sbs/PoSt/1122_181367.HtM
BbS.okapop120.sbs/PoSt/1122_361602.HtM
BbS.okapop121.sbs/PoSt/1122_407710.HtM
BbS.okapop122.sbs/PoSt/1122_954251.HtM
BbS.okapop113.sbs/PoSt/1122_413677.HtM
BbS.okapop114.sbs/PoSt/1122_900677.HtM
BbS.okapop115.sbs/PoSt/1122_205451.HtM
BbS.okapop116.sbs/PoSt/1122_464481.HtM
BbS.okapop117.sbs/PoSt/1122_244856.HtM
BbS.okapop118.sbs/PoSt/1122_458853.HtM
BbS.okapop119.sbs/PoSt/1122_515884.HtM
BbS.okapop120.sbs/PoSt/1122_475703.HtM
BbS.okapop121.sbs/PoSt/1122_884375.HtM
BbS.okapop122.sbs/PoSt/1122_725239.HtM

#牛客AI配图神器#

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-19 12:08
点赞 评论 收藏
分享
我是个没天赋的人,努力学习也只考上了个一本,家里条件也不怎么样。大一玩了一年,没怎么学技术,也没有卷绩点,全在游戏小说抖音中度过。大二上接触了牛客,看到了许多优秀的同龄人。很多双非的同学,甚至不少学院本的同学都进了大厂实习。我把他们作为榜样,决定好好学习。我每天都至少学八九个小时,很多次都想要放弃,想哭,我都坚持了下来。我总是告诉自己,只要努力,就一定能有好的结果。这几个月过的很累,但也很充实。转眼就到大二下了,我决定去找实习了,但是学校的认可度让我感到心底发凉,明明和广工这种知名双非分差不多,结果总被问是不是公办本科。两个月投了一千份实习,只有四个面试,最终去了个中小厂实习。结果就是改了两个月bug,虽然mt人挺好,但是实在学不了什么东西,所以就离职开始面试。凭借这段实习,确实多了不少中小厂面试,但是大厂依旧没有面试机会。除了字节腾讯所有大厂都投了,结果依旧是0面试。最终有幸获得美团的面试机会,面试也幸运的通过,然后入职了。为了省钱坐十几个小时硬座到北京,到北京的第一天,由于太激动想要租房,结果被坑了2600,之前实习的地方,房东也故意不退押金,加起来总共损失3000多。虽然很难过,但是我还是忍受了下来,我想着实习才刚开始,会好起来的。实习了大半个月,跟学校这边沟通一直不成功,我每天都寝食难安,精神都快崩溃了,经常凌晨两三点才睡着,想要跳楼。最后迫于无奈,我一大早我坐高铁回去,恳求院主任给我一个机会,我怎么恳求讲理都没用,甚至都磕头下跪了,还是没用。院主任一点机会都没给我,连让我跟各科老师沟通机会都不给,要不休学要不辞职。我没得选择,这段实习我看的比我的生命还重要,这不仅是我这大半年的心血,更是未来的一份希望。我只能休学,我想着现在好好实习,多学点技术,到时候秋招早点拿到offer,然后再补这学期的课也不是不行。但是,现实总是事与愿违。这三个月说实话并没有学到什么东西,前一个月很闲,这两个月事很多,每天基本都是九点后下班,但都是杂活。产出都是靠我看文档加上代码写上去的。我真的很想锻炼一下技术,但是总是不尽人意。三个月了,我到现在都还没做过一个像样点的需求。产出是能编,但有破绽不说还没锻炼到技术。我好想真正的做一下需求啊,我好想真正的走完一遍流程,去上线一次啊。接下来两个月,我不知道该怎么坚持下去了,现在每天都想哭,很焦虑,很难受。冒着将来可能延毕的风险,我赌上了一切,结果输的这么彻底,可能我就只是个小丑吧。如果家庭好点就不用卷了,如果我聪明一点就能上个好学校了,如果大一有人带我,我就不会摆烂了,如果院主任给我个机会,我就不用这么苦了,如果我实习能有机会好好锻炼自己,我就不用这么难受焦虑了。但是没办法,我又能怎么办呢,无非是咬紧牙关罢了,毕竟没人能够帮助我,只能靠自己我可真是个小丑啊
牛客57762807...:这种院长就是恶心的死,家里户口本只有一页的孤儿,我们院长也是,家里人都去亲自找院长,送几百块的水果,送礼物,结果还是被她一顿电话操作毁offer了,担心学生安全不放实习就算了,特么是担心上课没人去,我这种会容易带坏风气导致很多人效仿,***妈呢,什么时候学生的前途被一堆KPI数字给限制了,本来还想做个乖孩子的,以为院长能开开恩,但是这种死了没的东西让我决定我再也不做乖孩子了,后面才知道爱哭的孩子没有奶吃的,还会被一顿毒打,大三下学期我决定偷偷溜走一学期,一节课都不去,少的钱她一个孤儿也给我补不了
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务