hooks
简介
背景:
- class组件, 代码量比较大, 需要绑定this。
- 函数组件, 如果后续需要使用state,受限制。
hooks解决什么问题:
- useState()
- useContext()
- useReducer()
- useEffect()
useState的逻辑分3部分:
- 执行mountState
- 判断deps是否为undefined
- 打上fiberEffectTag
- 创建一个effect的链表
- 把effect添加到链表的最后quene
- 执行dispatch
执行updateState
初次执行App()构建Fiber阶段
- 执行
- pushEffect 到componentUpdateQuene里, callback在这个阶段是没有执行
- commitRoot 调用commitLayoutEffects, 调用commitLifeCycles, commitHookEffectListMount执行effect.create, 把结果赋值给distory
- 调用setCount导致App(), 重新构建Fiber
- 执行useEffect, 调用updateEffect
- 对比依赖的值和原本的值。如果有变化, 需要push一个新的effect
- 同4逻辑
事件机制
关键: 事件委托
- 事件挂载在根组件
- 冒泡方式, target、currentTarget找到对应的callback
- 执行对象的callback
执行onclick的callback前, 会先执行interactiveUpdates
onclick={() => {}}
参考: