当前位置: 首页 > article >正文

27.useFetch

在 React 应用开发中,处理网络请求是一个常见而重要的任务。虽然 JavaScript 的 fetch API 提供了一种现代化的方式来进行网络请求,但在 React 组件中使用它可能会变得复杂。useFetch 钩子提供了一种声明式的方法来处理网络请求,简化了错误处理、加载状态管理和请求取消等复杂操作。以下是如何实现和使用这个自定义钩子:

const useFetch = (url, options) => {
  const [response, setResponse] = React.useState(null);
  const [error, setError] = React.useState(null);
  const [abort, setAbort] = React.useState(() => {});

  React.useEffect(() => {
    const fetchData = async () => {
      try {
        const abortController = new AbortController();
        const signal = abortController.signal;
        setAbort(abortController.abort);
        const res = await fetch(url, {...options, signal});
        const json = await res.json();
        setResponse(json);
      } catch (error) {
        setError(error);
      }
    };
    fetchData();
    return () => {
      abort();
    }
  }, []);

  return { response, error, abort };
};

const ImageFetch = props => {
  const res = useFetch('https://dog.ceo/api/breeds/image/random', {});
  if (!res.response) {
    return <div>Loading...</div>;
  }
  const imageUrl = res.response.message;
  return (
    <div>
      <img src={imageUrl} alt="avatar" width={400} height="auto" />
    </div>
  );
};

ReactDOM.createRoot(document.getElementById('root')).render(
  <ImageFetch />
);

这个技巧的关键点包括:

  1. 使用 useState 来管理响应、错误和中止函数的状态。

  2. 使用 useEffect 来执行异步的 fetch 操作。

  3. 使用 AbortController 来实现请求的取消功能。

  4. 返回包含响应、错误和中止函数的对象,方便在组件中使用。

使用这个钩子时,需要注意以下几点:

  1. 钩子返回一个对象,包含 responseerrorabort 三个属性。

  2. 在组件卸载时,会自动取消未完成的请求。


http://www.kler.cn/a/524661.html

相关文章:

  • DeepSeek大模型技术解析:从架构到应用的全面探索
  • docker安装emqx
  • matlab提取滚动轴承故障特征
  • 【学习笔记】计算机网络(二)
  • MongoDB常见的运维工具总结介绍
  • 三星手机人脸识别解锁需要点击一下电源键,能够不用点击直接解锁吗
  • unity学习22:Application类其他功能
  • rust操作pgsql、mysql和sqlite
  • ResNeSt-2020笔记
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》033-响应式编程的原理及在Vue中的应用
  • P10638 BZOJ4355 Play with sequence Solution
  • 前端实战:小程序搭建商品购物全流程
  • 第21节课:前端构建工具—自动化与模块化的利器
  • 移动人的新春”序曲“
  • ZZNUOJ(C/C++)基础练习1011——1020(详解版)
  • C语言数组编程实例
  • CTF从入门到精通
  • ollama如何将模型移动到D盘以及如何直接下载到D盘
  • CTFSHOW-WEB入门-命令执行39-53
  • 基于 WEB 开发的在线学习系统设计与开发
  • Ubuntu 16.04用APT安装MySQL
  • 掌握Java反射:在项目中高效应用反射机制
  • 价值交换到底在交换什么
  • 批量卸载fnm中已经安装的所有版本
  • 解决双系统引导问题:Ubuntu 启动时不显示 Windows 选项的处理方法
  • Redis学习之哨兵二