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, componentDidUpdateFunction
dicetak selama render awal tetapi componentDidUpdateClass
tidak 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
?