मेरे पास एक उपयोगकेस है जहां मुझे अपने प्रतिक्रिया घटक को अनमाउंट करने की आवश्यकता है। लेकिन कुछ मामलों में, विशेष प्रतिक्रिया घटक एक अलग समारोह द्वारा अनमाउंट किया जाता है। इसलिए, मुझे यह जांचने की आवश्यकता है कि घटक को अनमाउंट करने से पहले आरोहित किया गया है या नहीं।क्या यह जांचने का कोई तरीका है कि प्रतिक्रिया घटक अनमाउंट किया गया है या नहीं?
उत्तर
के बाद से isMounted()
आधिकारिक तौर पर पदावनत किया जा रहा है, तो आप अपने घटक में ऐसा कर सकते हैं:
componentDidMount() {
this._ismounted = true;
}
componentWillUnmount() {
this._ismounted = false;
}
अपनी खुद की state
चर को बनाए रखने का यह पैटर्न ReactJS दस्तावेज में विस्तृत है: https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html
मैं कि पाया घटक अनमाउंट किया जाएगा, इस var
मुझे यहां मिला क्योंकि मैं polling
एपीआई को रोकने के लिए एक रास्ता तलाश रहा था।
react docswebsocket
केस को कवर करता है, लेकिन मतदान नहीं करता है।
तरह से मैं यह
// React component
let allowPolling = true
React.createClass({
poll() {
if (!allowPolling) {
return
}
// otherwise, call the api
}
componentWillMount() {
allowPolling = true
}
componentWillUnmount() {
allowPolling = false
}
})
यह काम करता है के आसपास काम किया। आशा है कि यह मदद करता है
कृपया,
मुझे लगता है कि शुभम जवाब एक समाधान के लोगों का उपयोग बंद करने के लिए अपने कोड संक्रमण करना होगा कि के लिए प्रतिक्रिया ने सुझाव दिया है मुझे पता है तुम लोग इस बात के लिए किसी भी नाकाम रहने के परीक्षण का मामला जानते हैं कि चलो =] isMounted
विरोधी पैटर्न।
यह आवश्यक नहीं है, लेकिन यह इस समस्या के वास्तविक समाधानों को सूचीबद्ध करने योग्य है।
The article linked by Shubham इस विरोधी पैटर्न से बचने के लिए 2 सुझाव प्रदान करता है। जिसकी आपको आवश्यकता है, उस पर निर्भर करता है कि जब आप घटक को अनमाउंट करते हैं तो आप सेटस्टेट को क्यों कॉल कर रहे हैं।
अगर आप अपने घटक में एक फ्लक्स दुकान का उपयोग कर रहे हैं, तो आप componentWillUnmount में सदस्यता समाप्त करना होगा
class MyComponent extends React.Component {
componentDidMount() {
mydatastore.subscribe(this);
}
render() {
...
}
componentWillUnmount() {
mydatastore.unsubscribe(this);
}
}
आप ES6 वादा करता है, आप करने के लिए आपके वादा रैप करने के लिए आवश्यकता हो सकती है का उपयोग करते हैं यह रद्द करने योग्य है।
const cancelablePromise = makeCancelable(
new Promise(r => component.setState({...}}))
);
cancelablePromise
.promise
.then(() => console.log('resolved'))
.catch((reason) => console.log('isCanceled', reason.isCanceled));
cancelablePromise.cancel(); // Cancel the promise
जुड़ा हुआ आलेख में और makeCancelable
बारे में पढ़ें।
निष्कर्ष में, चर सेट करके और समस्या को घुमाने के द्वारा इस समस्या को पैच करने का प्रयास न करें, समस्या की जड़ पर जाएं। यदि आप किसी के साथ आ सकते हैं तो कृपया अन्य आम मामलों के साथ टिप्पणी करें।
- 1. क्या कोई स्केलर स्ट्रिंग किया गया है या नहीं, यह जांचने का कोई तरीका है?
- 2. वेग: यह जांचने का कोई तरीका है कि चर परिभाषित किया गया है या नहीं
- 3. क्या सख्त मोड लागू किया गया है या नहीं, यह जांचने का कोई तरीका है?
- 4. कोई घटक अनमाउंट करता है?
- 5. यह जांचने का सही तरीका है कि कोई फ़ॉर्म पहले से दिखाया गया है या नहीं?
- 6. क्या यह जांचने का कोई तरीका है कि कोई चर जावास्क्रिप्ट में दिनांक है या नहीं?
- 7. क्या यह जांचने का कोई तरीका है कि जावा में एक चर परिभाषित किया गया है या नहीं?
- 8. क्या यह जांचने का कोई तरीका है कि अलार्म पहले से सेट है या नहीं?
- 9. यह जांचने का सबसे अच्छा तरीका क्या है कि कोई S3 ऑब्जेक्ट मौजूद है या नहीं?
- 10. क्या यह जांचने का कोई तरीका है कि पॉइंटर खतरे में है या नहीं?
- 11. क्या यह जांचने का कोई तरीका है कि रूबी चर में बाइनरी डेटा है या नहीं?
- 12. जेएस यह जांचने का कोई तरीका है कि कोई ईवेंट मौजूद है या नहीं?
- 13. यह जांचने का सबसे अच्छा तरीका है कि कोई सूची शून्य नहीं है या नहीं?
- 14. क्या कोई सबप्रोसेस अभी भी चल रहा है या नहीं यह जांचने का कोई तरीका है?
- 15. अमेज़ॅन SimpleEmail: यह जांचने के लिए कि कोई ईमेल डिलीवर किया गया है या नहीं?
- 16. क्या यह जांचने का कोई तरीका है कि निर्देशिका में इंगित प्रतीकात्मक लिंक हैं या नहीं?
- 17. यह जांचने का सबसे अच्छा तरीका क्या है कि स्केलर मॉडल फिट किया गया है या नहीं?
- 18. क्या यह जांचने का कोई तरीका है कि उपयोगकर्ता ने वास्तव में आपका ऐप रेट किया है या नहीं?
- 19. क्या यह बताने का कोई तरीका है कि ओपनजीएल ऑपरेशन समाप्त हो गया है या नहीं?
- 20. क्या यह जांचने का कोई तरीका है कि जावा में दो ऑब्जेक्ट्स अलियाकृत हैं या नहीं?
- 21. क्या यह जांचने का कोई तरीका है कि दो सरणी के समान तत्व हैं या नहीं?
- 22. क्या यह जांचने का क्रम है कि कोई स्ट्रिंग शून्य या खाली है या नहीं?
- 23. एमएसवीसी - यह जांचने का कोई तरीका है कि फ़ंक्शन वास्तव में रेखांकित है या नहीं?
- 24. क्या कोई कॉलम शून्य है या नहीं, यह जांचने का कोई त्वरित तरीका है?
- 25. यह जांचने का कोई तरीका है कि XmlSchemaParticle एक खाली पट्टी है या नहीं?
- 26. क्या यह जांचने का कोई तरीका है कि उपयोगकर्ता ने ऐप स्टोर पर अपना ऐप रेट किया है या नहीं?
- 27. यह जांचने का सबसे पायथन तरीका है कि किसी शब्दकोष में कोई मान परिभाषित किया गया है या शून्य लंबाई
- 28. यह निर्धारित करने का कोई तरीका है कि कोई तत्व लपेटा गया है या नहीं?
- 29. यह पता लगाना कि कोई HttpModule लोड किया गया है
- 30. क्या टेदरिंग सक्रिय है या नहीं यह जांचने का कोई तरीका है?
डिप के लिए धन्यवाद ... दस्तावेज़ों से ... बस एक _isMounted प्रॉपर्टी को घटक DidMount में सत्य पर सेट करें और इसे घटक में गलत पर सेट करें WillUnmount ... हालांकि, इसका उपयोग कर।सेटस्टेट ({आरोहित: झूठा}); चेतावनी को रोकने के लिए बहुत देर हो सकती है क्योंकि राज्य में परिवर्तन तुरंत नहीं होते हैं - इसके लिए केवल एक वर्ग संपत्ति का उपयोग करना बेहतर है ... this.mounted = false - धन्यवाद, यह मुझे सही दिशा में इंगित करता है – danday74
@ danday74, हाँ आप सही हैं। जब मैंने जवाब लिखा था तो शायद मुझे उस बिंदु को याद आया। जवाब देने पर विचार करें अगर यह –
मदद करता है हाँ मैंने इसे 10 दिन पहले उठाया :) – danday74