Till now I thought the only reason child component is re-rendered is because of changing passed props. But I've created a CodeSandbox and it turns out that Child component which doesn't receive any props is re-rendered every time parent's state changes. So my question is: what are all reasons for re-rendering/updating Child component?
Here is App.js file:
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);
And here is Child component:
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;