समस्या: रिएक्ट हुक और इवेंट श्रोता का उपयोग करते समय, राज्य कंसोल लॉग गलत जानकारी प्रदर्शित करता है।
प्रदान किए गए कोडसैंडबॉक्स पर विचार करें: https://codesandbox.io/s/lrxw1wr97m। जब आप "कार्ड जोड़ें" बटन पर दो बार क्लिक करते हैं, और फिर पहले कार्ड में "बटन1" पर क्लिक करते हैं, तो कंसोल दो कार्डों के साथ स्थिति को सही ढंग से प्रदर्शित करता है। हालाँकि, यदि आप उसी कार्ड में "बटन 2" पर क्लिक करते हैं (जिसे एक इवेंट श्रोता द्वारा नियंत्रित किया जाता है), तो कंसोल गलत स्थिति में केवल एक कार्ड प्रदर्शित करता है।
कार्ड प्रदाता और कार्ड घटकों में इवेंट हैंडलर के अलग-अलग व्यवहार से समस्या उत्पन्न होती है। कार्डप्रोवाइडर कार्यात्मक घटक, हैंडलकार्डक्लिक और हैंडलबटनक्लिक के भीतर परिभाषित ईवेंट हैंडलर, घटक के प्रस्तुत होने पर हर बार फिर से परिभाषित होते हैं। इसका मतलब यह है कि वे उस समय की स्थिति को संदर्भित करते हैं जब वे परिभाषित होते हैं, जो ईवेंट श्रोता के ट्रिगर होने पर बासी हो सकता है। घटक के पूरे जीवनचक्र में। परिणामस्वरूप, इवेंट श्रोता फ़ंक्शन उस समय की स्थिति को संदर्भित करता है जब घटक माउंट किया गया था, जो पुराना है।
समाधान - स्टेट अपडेटर फ़ंक्शन का उपयोग करना
const eventListener = () => {
// Function receives fresh state
setState(freshState => freshState 1);
};
// Event listener is registered using `useEffect` to ensure it is only registered once
useEffect(() => {
// Register event listener
// ...
// Unregister event listener on component unmount
return () => {
// ...
};
}, []);
अन्य समाधान
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3