React中的 Hook

85 阅读1分钟

Hook 是 React 16.8 的新增特性,是一些可以让你在函数组件里“钩入” React state 及生命周期等特性的函数。

内置Hook

1. useState

首先 useState 初始化有两种 全部都是异步的 (react事件 原生 addeventListener ajax 生命周期)

    //第一种 
      const [x, setX] = useState(值)
    //第二种
      const [Y, setY] = useState(() => {
        //逻辑
        //return 值
      })

  //获取异步的值
  setX(preValue => {
    preValue //上一次的值
    return 值
  })

2.useEffect

给函数组件增加了操作副作用(数据获取、订阅或者手动修改DOM)的能力。它跟 class 组件中的 componentDidMountcomponentDidUpdatecomponentWillUnmount 具有相同的用途,只不过被合并成了一个 API。

    // componentDidMount 只执行一次
      useEffect(() => {

      },[])

   // componentDidUpdata 更新完成
      useEffect(() => {

      },[依赖1, 依赖2, ...])

   // 卸载完成: 组件更新 || 组件销毁 (路由跳转)
      useEffect(() => {
        return () => {

        }
      },[依赖1, 依赖2, ...])

3. useMemo

useMemo是一个React Hook,可以在重新渲染之间缓存计算结果。

    useMemo(() => {
        // 立即执行
        // 必须有 return 
        // 缓存 return 出来的值
    }, [])

在组件的顶层调用useMemo以在重新渲染之间缓存计算:

    import { useMemo } from 'react';  

    export default function Home(props) {
       const [x, setX] = useState(10000);

   /*
      useMemo 依赖为空 只在首次渲染执行一次
      第一次 fn = 49995000
      第二次 直接拿出缓存的值, 49995000 给 fn
  */
    const fn = useMemo(() => {
        let num = 0;
        for (let i = 0; i < x; i++) {
          9;
          num += i;
        }
        return num;
    }, [x]);
    return (
       <>
         <h2>X: {x}</h2>
       </>
    );
  }

3.useCallback

useCallback是一个React Hook,它允许您在重新渲染之间缓存函数定义。

    useCallback
    // 他是缓存一个函数
    // 防止子组件重复渲染
    const fn = useCallback(() => {

    }, [])

在组件的顶层调用useCallback,在重新渲染之间缓存函数定义:

    import { useCallback } from 'react';  

    export default function ProductPage({ productId, referrer, theme }) {  

        const fn = useCallback((orderDetails) => {  

            post('/product/' + productId + '/buy', {  
                referrer,  
                orderDetails,  
        });  
    }, [productId, referrer]);