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