• 封装通用的功能
  • 开发和使用第三方 Hooks
  • 自定义 Hook 带来了无线的扩展性,解耦代码

useAxios

  1. import { useEffect, useState } from 'react';
  2. import axios from 'axios';
  3. // 封装 axios 发送网络请求的自定义 Hook
  4. function useAxios(url) {
  5. const [loading, setLoading] = useState(false);
  6. const [data, setData] = useState();
  7. const [err, setErr] = useState();
  8. useEffect(() => {
  9. // 利用 axios 发送网络请求
  10. setLoading(true);
  11. axios.get(url)
  12. .then(setData)
  13. .catch(setErr)
  14. .finally(() => setLoading(false));
  15. }, [url]);
  16. return [loading, data, err];
  17. }
  18. export default useAxios;

自定义 hook

  • 本质是一个函数,以 use 开头(重要)
  • 内部正常使用 useEffect useState 等获取其他 hooks
  • 自定义返回结果,格式不限

Hooks 使用规范

  • 命名规范 useXxxx
  • 只能用于 React 函数组件和自定义 Hook 中,其他地方不可以
  • 只能用于顶层代码,不能在循环、判断中使用 Hooks
  • eslint 插件 eslint-plugin-react-hooks 可以帮到你