为什么startTransition会在没有状态变化的情况下也触发高优先级的更新和重新渲染?
我看到下面这段说法:说法:
调用
startTransition,即使在其中没有触发任何更新,也仍然会同时引发一个高优先级更新和一个低优先级更新。
要验证这一点,请考虑下面的示例:
export default function App() {
const [isPending, startTransition] = useTransition();
console.log("render");
// useDebug;
return (
<button onClick={() => startTransition(() => {})}>
Start Transition
</button>
);
}
每次点击按钮都会引起重新渲染,尽管该Transition回调是空的。
这引发了一些问题:
- 如果在
startTransition内没有触发任何状态更新,为什么仍会发生重新渲染? - 这个重新渲染真的就是如前述所说的高优先级更新吗?
- 如果调用
startTransition仍然会触发紧急更新,难道不就有点违背了它被设计为低优先级工作的初衷吗?
所链接的博文使用了一个自定义的 useDebug 钩子,声称这种行为反映了高优先级更新,但我不确定这有多准确。
能否解释一下?
解决方案
为什么startTransition会在没有状态变化的情况下触发高优先级更新和重新渲染?
不过确实有一个“状态”变化。第一次重新渲染是由将 isPending 状态更新为 true 引起的,随后对于任何实际更新,又会进行一次低优先级的重新渲染。
来自React文档:https://react.dev/reference/react/useTransition#usage
为了向用户反馈正在进行的Transitions,
isPending状态在第一次调用startTransition时切换为true,并一直保持为true,直到所有操作完成并向用户显示最终状态。
我真的无法对博文作者的主张,或他们的思路,做出评价;如果可能的话,直接和他们讨论可能会更有帮助。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。