嵌套组件如何渲染?

时间:2020-04-18 17:54:35

标签: reactjs vue.js nested components rendering

让我们创建一个在包含嵌套组件的页面中使用的组件。 例如-

containerComponent.tsx

import NestedComponent from '../components/nestedComponent';

const ContainerComponent = () => {
  const { value, setValue} = useState(0);

  return (
      <>
        <h1>This is the Nested Component</h1>
        <NestedComponent />
        <button onClick={()=>setValue(value+1)}>
          {{ value }} time Updated
        </button>
      </>
  );
};

export default ContainerComponent;

在这里,我们在index.tsx中使用了父组件,如下所示-

index.tsx

import ContainerComponent from '../components/containerComponent';

const Home = ()=> {
  return (
      <div>
        <ContainerComponent />
      </div>
  );
};

export default Home;

在这里,当我从主页视图中单击按钮时,“值”状态变量将更新,并且ContainerComponent(NestedComponent的父级)将重新呈现。 但是嵌套组件还会渲染吗?(尽管没有从父组件通过嵌套组件传递参数或props值)。

1 个答案:

答案 0 :(得分:1)

嗨,您可以使用React.memo导出NestedComponent,然后在ContainerComponent中更改任何状态时都不会呈现它。这是针对功能组件的。

这是代码

import React, {useState} from "react";

const NestedComponent = () => {
    const {value, setValue, errors} = useState(0);
    console.log('child');
    return (
        <div>
            ContainerComponent
        </div>
    );
};

export default React.memo(NestedComponent);

对于类组件,您应该从React.PureComponent而不是像React.Component这样扩展类。

class NestedComponent extends React.PureComponent{
   render(){
      ...
   }
}