重新渲染组件会为其子组件创建新实例吗?

时间:2018-08-04 21:07:38

标签: reactjs

class Clock extends React.Component {
  render() {
    return (
      <div>
        <MyComponent/>
     </div>
    );
  }
}

假定此组件重新呈现。每次渲染时,都会创建MyComponent的新实例吗?

2 个答案:

答案 0 :(得分:2)

enter image description here

React比较从render()方法返回的当前Element树结构。 React使用生成的键(或分配的键)将每个Element匹配到Component实例。 React确定我们是否有新实例(A.3),删除实例(A.0.1)或更新现有实例(A,A.0,A.0.0)。

如果键相同,则React将把props传递给现有实例,从而启动其Update生命周期。如果我们添加了新组件或更改了键,React将根据Element数据创建新实例。这些新组件随后进入“出生/安装”阶段。

More info

答案 1 :(得分:1)

不,一旦创建了类组件,React就不会创建它的新实例,除非将该组件卸载并再次安装。

您可以检查在父组件渲染时是否多次调用了构造函数。

class MyComponent extends Component {
    constructor(props){
        super(props);
        console.log("New instance of MyComponent is created");
    }
}