[英]Prevent React from re-rendering a specific child component
我有一个有条件地渲染几个子组件的react组件。 简化的代码就是:
render(): {
const component1 = condition ? renderComponent2() : null;
const component2 = renderComponent2();
return (
<div>
{component1}
{component2}
</div>
);
}
问题是,只要condition
发生变化, component2
就会被破坏并重新呈现。 我试图阻止它并保持原始元素。 我尝试在没有运气的情况下向component2
添加key
。
[edit]即使在component1
总是存在的情况下也会发生这种情况,并且我在其上更改标志以使用CSS隐藏它:/
形成示例代码,您的component2
将不会被销毁并再次重新安装。 React将运行任何render
和可能的其他生命周期方法,但React将更新 DOM中的组件。
也许你的代码更复杂。 这会导致您认为自己没有重新渲染component2
,而是尝试渲染一个全新的组件。 但同样,从您的示例代码中可以看出这一点并不清楚。
component2
实例。 React不会将背景颜色重置为绿色,因为react认为(来自其虚拟DOM)背景颜色未更改且仍为绿色。
更新:codepen现在还包含有关它如何发生的进一步证明:
<p>
元素到<h1>
元素) PS:因为您的示例代码通过方法调用创建组件,所以不应该应用任何生命周期方法(例如shouldComponentUpdate
)。 通过方法渲染组件只应针对简单组件,即反应元素。 请参阅此处的官方文档 :
ReactElement是DOM元素的轻量级, 无状态 ,不可变的虚拟表示。
您是否尝试过使用shouldComponentUpdate ? 这正是应该使用此功能的原因。 只需将其添加到您的component2
并在其中添加适当的条件。
如果condition
状态发生变化,组件将自行重新渲染,这意味着component2
也将被更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.