React中useRef是否优先级高于className与style?渲染逻辑理解是否正确?
React中useRef与className/style的执行逻辑问题
你的理解部分正确,但核心不是useRef优先级更高,而是代码执行顺序导致的结果:
具体执行流程
- 初始渲染阶段:React会根据返回的JSX生成DOM节点,此时div会被设置
className="global-container"、style={{color: "black"}},同时这个DOM节点会被赋值给comp_ref.current。 - 初始渲染完成后:依赖为空数组的
useEffect会在DOM挂载完成后执行一次回调,这里通过comp_ref.current直接修改了DOM元素的className和style属性,这会覆盖掉React之前设置的值,所以div会变成local-container和白色文字。
关键说明
这不是useRef的“优先级”问题,而是React渲染流程与DOM直接操作的执行顺序差异:
- React在渲染时会把JSX里的属性同步到DOM上;
useEffect的回调是在渲染结束、DOM已经更新完毕后才触发的,此时直接操作DOM会覆盖React之前的设置;- 如果之后组件因为状态变化重新渲染,React会再次根据JSX里的
className和style更新DOM,这时div会变回global-container和黑色文字(因为你的useEffect只执行一次)。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

