跳到主要内容

什么是自定义 Hook

自定义 Hook

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

演示 useAxios 例子

  • 本质是一个函数,以 use 开头(重要)
  • 内部正常使用 useState useEffect 或者其他 Hooks
  • 自定义返回结果,格式不限
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

测试代码

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