【发布时间】:2020-08-01 06:14:42
【问题描述】:
让我们创建一个在包含嵌套组件的页面中使用的组件。 例如 -
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 的父级)会重新渲染。 但是嵌套组件是否也渲染?(虽然没有从它的父组件通过嵌套组件传递参数或道具值。)
【问题讨论】:
-
功能组件总是重新渲染子组件。
-
你可以选择使用React.memo()来减少不必要的重新渲染
-
为什么基于类的组件不@DrewReese?
-
基于类的组件具有生命周期功能,例如 shouldcomponentupdate 可以提供帮助。功能组件没有任何生命周期功能。一个近似的类比是
useEffect钩子,它可以大致等同于componentDidMount、componentDidUpdate和componentWillUnmount。如果您阅读有关 React.memo 的链接,您会发现它“类似于React.PureComponent,但用于函数组件而不是类”。
标签: reactjs vue.js nested components rendering