Menurut dokumen:
componentDidUpdate()dipanggil segera setelah pembaruan terjadi. Metode ini tidak dipanggil untuk render awal.
Kita bisa menggunakan useEffect()hook baru untuk mensimulasikan componentDidUpdate(), tetapi sepertinya useEffect()dijalankan setelah setiap render, bahkan untuk pertama kalinya. Bagaimana cara membuatnya tidak berjalan pada render awal?
Seperti yang Anda lihat pada contoh di bawah ini, componentDidUpdateFunctiondicetak selama render awal tetapi componentDidUpdateClasstidak dicetak selama render awal.
function ComponentDidUpdateFunction() {
const [count, setCount] = React.useState(0);
React.useEffect(() => {
console.log("componentDidUpdateFunction");
});
return (
<div>
<p>componentDidUpdateFunction: {count} times</p>
<button
onClick={() => {
setCount(count + 1);
}}
>
Click Me
</button>
</div>
);
}
class ComponentDidUpdateClass extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0,
};
}
componentDidUpdate() {
console.log("componentDidUpdateClass");
}
render() {
return (
<div>
<p>componentDidUpdateClass: {this.state.count} times</p>
<button
onClick={() => {
this.setState({ count: this.state.count + 1 });
}}
>
Click Me
</button>
</div>
);
}
}
ReactDOM.render(
<div>
<ComponentDidUpdateFunction />
<ComponentDidUpdateClass />
</div>,
document.querySelector("#app")
);
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>
<div id="app"></div>
count?