Skip to content

什么是自定义 Hook

自定义 Hook

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

演示 useAxios 例子

  • 本质是一个函数,以 use 开头(重要)
  • 内部正常使用 useState useEffect 或者其他 Hooks
  • 自定义返回结果,格式不限
js
import { useState, useEffect } from 'react';
import axios from 'axios';

// axios 返送网络请求
function useAxios(url) {
  const [loading, setLoading] = useState(false);
  const [data, setData] = useState();
  const [error, setError] = useState();

  useEffect(() => {
    // 利用 axios 发送网络请求
    setLoading(true);
    axios
      .get(url) // 发送一个 get 请求
      .then((res) => setData(res))
      .catch((err) => setError(err))
      .finally(() => setLoading(false));
  }, [url]);

  return [loading, data, error];
}

export default useAxios;

测试代码

js
import React from 'react';
import useAxios from '../customHooks/useAxios';

function CustomHooksMemo() {
  const url = 'http://localhost:3000/';

  // 数组解构
  const [loading, data, error] = useAxios(url);

  if (loading) return <div>loading...</div>;

  return error ? (
    <div>{JSON.stringify(error)}</div>
  ) : (
    <div>{JSON.stringify(data)}</div>
  );
}

export default CustomHooksMemo;

第三方 Hooks

基于 MIT 许可发布