我有一个有条件渲染几个子组件的react组件。简化的代码就是:
w
问题是render(): {
const component1 = condition ? renderComponent2() : null;
const component2 = renderComponent2();
return (
<div>
{component1}
{component2}
</div>
);
}
在component2
发生变化时会被破坏并重新呈现。我试图阻止它并保持原始元素。我尝试将condition
添加到key
但没有运气。
[edit]即使component2
始终存在,我也会发生这种情况,并且我在其上更改标记以隐藏或不使用CSS:/
答案 0 :(得分:2)
形成示例代码,您的component2
将不会被销毁并重新安装。
React将运行任何render
以及可能的其他生命周期方法,但是
React将更新 DOM中的组件。
也许你的代码更复杂。哪种情况会导致你认为你没有重新渲染component2
,而是试图渲染一个全新的组件。但同样,从您的示例代码中可以看出这一点并不清楚。
您可以找到proof of concept codepen here,其中包含以下内容:
component2
个实例,背景为绿色。 React不会将背景颜色重置为绿色,因为react认为(来自其虚拟DOM)背景颜色未更改且仍为绿色。
更新:codepen现在还包含进一步的证据:
<p>
元素到<h1>
元素) PS:因为您的示例代码通过方法调用创建组件,所以不应该应用任何生命周期方法(例如shouldComponentUpdate
)。通过方法渲染组件应仅针对简单组件,即反应元件。见official docs here:
ReactElement是一个轻量级, 无状态 ,不可变,虚拟 DOM元素的表示。
答案 1 :(得分:1)
您是否尝试过shouldComponentUpdate?这正是应该使用此功能的原因。只需将其添加到component2
并在其中添加适当的条件。
答案 2 :(得分:0)
如果condition
中的状态发生更改,则组件将重新呈现,这意味着component2
也将更改。