【发布时间】:2021-05-03 12:55:51
【问题描述】:
考虑以下示例:
import "./styles.css";
import React from "react";
function Children(props) {
const counter = props.counter2;
console.log("re-rendering children");
return (
<div className="App">
<p>counter2 value = {counter} </p>
</div>
);
}
export default function App() {
const [counter, setCounter] = React.useState(0);
const [counter2] = React.useState(0);
return (
<div className="App">
<p>counter value = {counter} </p>
<button onClick={(e) => setCounter((c) => c + 1)}>increment</button>
<Children counter2={counter2} />
</div>
);
}
Children 组件不依赖父状态counter,但是当我点击按钮时,我可以看到每次点击都会打印re-rendering 日志。如果我没记错的话,这意味着 Children 组件被重新渲染。我的问题是为什么?它不应该重新渲染,因为道具没有改变。
【问题讨论】:
-
因为默认情况下重新渲染的组件的所有子组件都会重新渲染。要防止子组件重新渲染,请考虑使用
React.memo -
在同一个地方找到了一个优秀的article :)
标签: javascript reactjs typescript