【发布时间】:2019-12-16 15:21:30
【问题描述】:
到目前为止,我认为重新渲染子组件的唯一原因是因为更改了传递的道具。但是我创建了一个CodeSandbox,结果发现每次父状态更改时都会重新渲染没有接收任何道具的子组件。所以我的问题是:重新渲染/更新子组件的所有原因是什么?
这里是 App.js 文件:
import React from "react";
import ReactDOM from "react-dom";
import Child from "./Child";
class App extends React.Component {
constructor() {
super();
this.state = {
counter: 0
};
}
componentDidMount() {
console.log("Parent mounted");
}
componentDidUpdate() {
console.log("Parent updated");
}
render() {
return (
<div>
<button
onClick={() =>
this.setState(prevState => ({ counter: prevState.counter + 1 }))
}
>
Increment
</button>
<button
onClick={() =>
this.setState(prevState => ({ counter: prevState.counter - 1 }))
}
>
Decrement
</button>
<Child />
</div>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
这里是子组件:
import React from "react";
import ReactDOM from "react-dom";
import "./styles.css";
class Child extends React.Component {
componentDidMount() {
console.log("Child mounted");
}
componentDidUpdate() {
console.log("Child updated");
}
render() {
return <div />;
}
}
export default Child;
【问题讨论】:
-
避免外部代码示例,直接在这里发布。另外我猜你的链接不是最新的
-
这听起来像是 How does react decide to rerender a component 的副本。
-
您的子组件当前为空
标签: reactjs