शीर्षक ही सब कुछ कह देता है। मैं समझता हूं componentDidMountकि DOM एक्सेस की आवश्यकता वाली किसी भी चीज़ के लिए उपयुक्त क्यों है, लेकिन AJAX अनुरोध के लिए या आमतौर पर इसकी आवश्यकता नहीं है।
क्या देता है?
शीर्षक ही सब कुछ कह देता है। मैं समझता हूं componentDidMountकि DOM एक्सेस की आवश्यकता वाली किसी भी चीज़ के लिए उपयुक्त क्यों है, लेकिन AJAX अनुरोध के लिए या आमतौर पर इसकी आवश्यकता नहीं है।
क्या देता है?
जवाबों:
componentDidMountसाइड इफेक्ट के लिए है। इवेंट श्रोता, AJAX, DOM को म्यूट करना आदि जोड़ना।
componentWillMountशायद ही कभी उपयोगी है; खासकर यदि आप सर्वर साइड रेंडरिंग के बारे में परवाह करते हैं (इवेंट श्रोताओं को जोड़ने से त्रुटियों और लीक होती है, और बहुत सारे अन्य सामान जो गलत हो सकते हैं)।
componentWillMountक्लास के घटकों को हटाने के बारे में चर्चा है क्योंकि यह कंस्ट्रक्टर के समान उद्देश्य को पूरा करता है। यह createClassघटकों पर रहेगा ।
componentWillMount? मैं वास्तव में भेद नहीं देखता।
componentWillMountसर्वराइड रेंडर पर निष्पादित किया जाएगा। यदि आप उपयोग कर रहे थे तो वेश्या componentDidMountको केवल क्लाइंटसाइड पर निष्पादित किया जाएगा। नतीजतन चीजों को componentWillMountबाहरी संपर्क में रखना या घटनाओं आदि के लिए बाध्य करना, एक महान विचार नहीं है। यदि आपके पास सर्वरसाइड पर अपने घटकों को प्रस्तुत करने की कोई योजना नहीं है, तो यह अभी भी संभावित कोड पोर्टेबिलिटी के लिए एक अच्छा विचार नहीं है। यह सब मुख्य कारण के बाहर है जो खराब है जो @daniula के उत्तर में समझाया गया है।
मैं शुरुआत में भी यही मुद्दा था। मैंने एक कोशिश करने का अनुरोध करने का फैसला किया, componentWillMountलेकिन यह विभिन्न छोटे मुद्दों में समाप्त होता है।
जब अजाक्स कॉल नए डेटा के साथ समाप्त होता है, तो मैं प्रतिपादन को ट्रिगर कर रहा था। कुछ बिंदु पर घटक के प्रतिपादन में सर्वर से प्रतिक्रिया मिलने में अधिक समय लगता है और इस बिंदु पर अजाक्स कॉलबैक अनमाउंट किए गए घटक पर रेंडरिंग को ट्रिगर कर रहा था। यह एक प्रकार का एज केस है, लेकिन संभवतः अधिक है, इसलिए इसे छड़ी करना अधिक सुरक्षित है componentDidMount।
componentWillMount, इसलिए आपको अभी भी componentDidMountअपने अजाक्स कॉल के लिए उपयोग करते रहना चाहिए ।
setStateएक घटक निर्माता में कभी भी कॉल नहीं करना चाहिए और आपके पास यह निर्धारित करने का कोई तरीका नहीं है कि AJAX कॉल कब पूरा होगा। twitter.com/dan_abramov/status/576453138598723585
राज्य को स्थापित करने वाले प्रलेखन के अनुसार, componentWillMountकोई पुन: प्रतिपादन ट्रिगर नहीं करेगा। यदि AJAX कॉल ब्लॉक नहीं हो रही है और आप Promiseउस अपडेट को घटक की स्थिति को सफलता पर लौटाते हैं, तो संभावना है कि घटक के प्रस्तुत होने के बाद प्रतिक्रिया आती है। जैसा कि componentWillMountआप एक पुन: रेंडर को ट्रिगर नहीं करते हैं, आपके पास वह व्यवहार नहीं होगा जिसकी आपको उम्मीद थी कि अनुरोधित डेटा के साथ घटक प्रदान किया जा रहा है।
यदि आप फ्लक्स लाइब्रेरी में से किसी का उपयोग करते हैं और स्टोर में डेटा का अनुरोध किया जाता है, तो घटक जुड़ा हुआ है (या एक जुड़े घटक से विरासत में) यह उस डेटा के स्वागत के रूप में एक मुद्दा नहीं होगा, सबसे अधिक संभावना है, बदलने का सहारा। अंत में।
componentWillMountएक नए राज्य को पहले रेंडर करने से पहले परिभाषित करने के कारण सिर्फ एक रेंडर को ट्रिगर नहीं करता है। लेकिन अगर setStateएक AJAX कॉलबैक में कहा जाता है, तो यह निश्चित रूप से पहले रेंडर के बाद बुलाया जाएगा, और यह फिर से रेंडर करेगा।
componentWillMountयह कह सकते हैं कि इसमें मौजूद तत्वों को एक्सेस करने का प्रयास किया जाएगा , तो यह विफल हो जाएगा कि घटक ... माउंट नहीं किया गया था।