Q & A
Q: useEffect 的销毁函数是什么时候执行?
A:
useEffect 的销毁函数是在 commit 阶段的 layout 阶段渲染视图完成之后执行的,useEffect 会在 beforemutation 阶段以一个 normal 的优先级被 schedule 调度。 在视图渲染后就会处理这个 effect,会先执行 destroy 再执行 create 。 相比之下,uselayouteffect 会在 mutation 阶段执行 destroy ,layout 阶段执行 create
Q: ref 的更新究竟是 mutation 阶段还是 layout 阶段执行的?
准确来说应该是在 mutation 阶段会解除 ref 的引用,在 layout 阶段重新绑定。这里涉及到两个方法,一个是 commitDetachRef 还有一个就是 commitAttachRef,在 mutation 阶段会先用前面的方法接触 ref 的引用,在 DOM 更新完成后,在 layout 阶段会再调用 commitAttachRef 去绑定新的 ref