डॉक्स के अनुसार:
componentDidUpdate()
अद्यतन होने के तुरंत बाद आह्वान किया जाता है। प्रारंभिक रेंडर के लिए इस विधि को नहीं कहा जाता है।
हम नए useEffect()
हुक का उपयोग अनुकरण करने के लिए कर सकते हैं componentDidUpdate()
, लेकिन ऐसा लगता है कि useEffect()
हर रेंडर के बाद भी दौड़ा जा रहा है, यहां तक कि पहली बार भी। प्रारंभिक रेंडर पर नहीं चलने के लिए मुझे यह कैसे मिलेगा?
जैसा कि आप नीचे दिए गए उदाहरण में देख सकते हैं, componentDidUpdateFunction
प्रारंभिक रेंडर के componentDidUpdateClass
दौरान मुद्रित किया गया है लेकिन प्रारंभिक रेंडर के दौरान मुद्रित नहीं किया गया था।
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
?