Skip to content
On this page

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

Released under the MIT License.