Skip to main content

issue

一些问题

Hook 需要注意些什么?why?

  • 注意执行顺序,不能在条件语句或函数中使用
  • Hook 链表需要按照顺序匹配,才能获取之前的数据

useState 是怎么工作的?

  • update 循环链表
  • 批量更新,多个相同更新仅触发一个任务调度

useEffect 是怎么工作的?

  • commit layout 阶段会根据 effect tag 决定是否将 effect 推入副作用队列中
  • 异步执行,执行回调前会先执行销毁函数

不同 Hook 的执行顺序

  • 比如 useMemo 回调比 useEffect 更快执行

小心闭包陷阱

const [count, serCount] = useState(1);
useEffect(() => {
setInterval(() => {
console.log(count);
}, 1000);
}, []);

可以用 useRef 解决 count 始终为 1 的问题

一些对比

  • useEffect 和 useLayoutEffect
  • useMemo 和 useCallback
  • useRef 和全局变量

其他问题参考 https://github.com/beichensky/Blog/issues/6

常用 Hook

  • useState
  • useEffect
  • useRef

其他 Hook

  • useMemo
  • useCallback
  • useContext
  • useReducer
  • useLayoutEffect