मुझे इस कोड के परिणाम के बारे में आसानी से बताएं।
const ForExample = () => {
const [name, setName] = useState('');
const [username, setUsername] = useState('');
useEffect(() => {
console.log('effect');
console.log({
name,
username
});
return () => {
console.log('cleaned up');
console.log({
name,
username
});
};
}, [username]);
const handleName = e => {
const { value } = e.target;
setName(value);
};
const handleUsername = e => {
const { value } = e.target;
setUsername(value);
};
return (
<div>
<div>
<input value={name} onChange={handleName} />
<input value={username} onChange={handleUsername} />
</div>
<div>
<div>
<span>{name}</span>
</div>
<div>
<span>{username}</span>
</div>
</div>
</div>
);
};
जब ForExample component
mounts, 'प्रभाव' लॉग इन किया जाएगा। यह से संबंधित है componentDidMount()
।
और जब भी मैं नाम इनपुट बदलता हूं, तो 'प्रभाव' और 'क्लीन अप' दोनों लॉग हो जाएंगे। इसके विपरीत, जब भी मैं [username]
दूसरे पैरामीटर में जोड़ा जाता हूं, तब से कोई भी संदेश लॉग नहीं किया जाएगा useEffect()
। यह से संबंधित हैcomponentDidUpdate()
अंत में, जब ForExample component
अनमाउंट, 'क्लीन अप' लॉग हो जाएगा। यह से संबंधित है componentWillUnmount()
।
हम सब जानते हैं कि।
जब भी घटक को फिर से प्रस्तुत किया जा रहा हो, तो 'साफ-सुथरा' किया जाता है।
मैं प्रवेश करने के लिए इस घटक केवल पल जब यह अनमाउंट है के लिए 'साफ' बनाना चाहते हैं, मैं सिर्फ का दूसरा पैरामीटर बदलना होगा useEffect()
करने के लिए []
।
लेकिन अगर मैं बदल [username]
जाता हूं []
, तो नाम इनपुट ForExample component
के componentDidUpdate()
लिए लागू नहीं होता है।
मैं क्या करना चाहता हूँ, घटक बनाने के componentDidUpdate()
लिए केवल नाम इनपुट और दोनों के लिए समर्थन करता है componentWillUnmount()
। (केवल घटक के अनमाउंट होने पर 'सफाई के लिए' लॉगिंग करें)
username
दूसरे तर्क के रूप में इसके साथ एक सरणी दिया जाता है, और एक जिसे दूसरे तर्क के रूप में एक खाली सरणी दिया जाता है।