你觉得react hooks简单吗?
    你看过react官方文档吗?
    你的同事、前辈、领导有没有教你用class Component的生命周期来类比hooks的执行时机?
    这个方法一点都不好,首先这个方法根本没有办法准确的类比,其次随着react18的到来会有个新的API-OffScreen可能对Hooks的执行时间造成影响,到时候更没有办法准确类比了
    今天从一个全新的角度学习Hooks,不需要文档、不需要生命周期,你只只要一个初中的数学知识:
    快速掌握React Hooks - 图1
    快速掌握React Hooks - 图2

    1. import {useState, useMemo, useCallback} from 'react'
    2. export default function App() {
    3. const [x , setX]= useState(0)
    4. //const y = 2*x + 1
    5. const y = useMemo(()=>2*x+1, [x])//useMemo包裹因变量y,显示的指定该因变量依赖的自变量
    6. //用callback用来缓存一个函数类型的因变量,也需要显示的指定该因变量依赖的自变量
    7. const changeX = useCallback(()=> setX(x+1), [x])
    8. //const changeX = () => set(x+1)
    9. //使用hooks显示的指明因变量有什么好处呢?
    10. //当使用时。y与changeX会被缓存下来,只要X不变,始终读取的是缓存的值,
    11. //不使用时,每次函数组件执行时,实际会基于x创建新的y与changeX,这涉及到react的性能优化
    12. return (
    13. <ul onClick={changeX}>
    14. <li>{x}</li>
    15. <li>{y}</li>
    16. </ul>
    17. )
    18. }

    快速掌握React Hooks - 图3
    组件的功能不仅局限于描述视图,还能产生副作用,副作用是函数式编程中的概念,对于一个函数,如果固定的输入一定会产生固定的输出, 例如: y=2x+1,这就是个纯函数,但是当我们引入随机数z, y=2x+1+z,x一定时,输出却不是一定的,我们就可以说这个函数是包含副作用的,在函数组件中,可以通过useEffect来定义有副作用的因变量,假设我们希望当x变化后,将当前页面的标题修改为X的值,改变标题这个行为就属于副作用,除此之外,比如请求数据,操作DOM,这些都属于副作用,我们都可与使用useEffect来处理

    useEffect=(()=> {
      document.title = x
    
    },[x])
    
    
    //当我们触发onclick事件时,x变化后,执行回调函数changeX,最终不仅视图变化。title也跟着变化,
    //可见自变量导致因变量变化后,因变量不仅可以作用于视图,也能触发副作用,
    

    useRef-标记变量,可以作用于自变量与因变量的不同路径中,是个单纯的保存标记,无论是自变量还是因变量,仅仅是在路径中起到缓存数据的作用

    const renderCountRef = useRef(1)
    const isOdd = renderCountRef.current % 2
    renderCountRef.current ++ 
    
    return (
      <div>{isOdd ? <div><Count data={x}/></div> : null} </div>
    )
    

    总结: react hooks的本质是自变量与因变量,其中useState用来定义自变量,useMemo与useCallback定义无副作用的因变量,useEffect定义有副作用的因变量,useRef是biaoji变量,为了方便操作更多的自变量,有了useReducer、为了跨组件层级的操作自变量,有useContext,最后为了让组件逻辑更灵活,有了useRef。

    以上是kasong老师学习笔记,简洁明了,大佬牛皮!