Theo tài liệu:
componentDidUpdate()
được gọi ngay sau khi cập nhật xảy ra. Phương thức này không được gọi cho kết xuất ban đầu.
Chúng ta có thể sử dụng useEffect()
hook mới để mô phỏng componentDidUpdate()
, nhưng có vẻ như useEffect()
nó đang được chạy sau mỗi lần kết xuất, ngay cả lần đầu tiên. Làm cách nào để làm cho nó không chạy trên kết xuất ban đầu?
Như bạn có thể thấy trong ví dụ bên dưới, componentDidUpdateFunction
được in trong lần hiển thị ban đầu nhưng componentDidUpdateClass
không được in trong lần hiển thị đầu tiên.
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
nào không?