Hooks(React 16.8 引入)主要解决三个问题:一是类组件中逻辑复用困难,HOC 和 render props 容易造成嵌套地狱,Hooks 可以用自定义 Hook 复用状态逻辑;二是生命周期函数把相关逻辑拆散(如订阅在 componentDidMount、取消在 componentWillUnmount),Hooks 让相关代码聚在一起;三是 class 的 this 指向、绑定问题以及类组件不利于编译优化。
useEffect 依赖机制:每次渲染后 React 会用 Object.is 浅比较新旧依赖数组,任一变化就执行上一次的清理函数(如果有)再执行 effect。不传依赖数组则每次渲染都执行;传空数组 [] 只执行一次(挂载时);传 [a, b] 则 a 或 b 变化才执行。effect 捕获的是本次渲染的 props/state(闭包),依赖写错会产生过期闭包 bug。
易错点:依赖必须是渲染期间可见的值;对象/函数字面量每次渲染都是新引用,需 useMemo/useCallback 稳定。追问方向:useState 与 setState 的合并行为差异、闭包陷阱、并发模式下 effect 的语义。