什么是自定义 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;