2014-11-26 12 views
91

शीर्षक यह सब कहता है। मैं समझता हूं कि घटक DidMount किसी भी चीज़ के लिए उपयुक्त क्यों है जिसके लिए DOM पहुंच की आवश्यकता होती है, लेकिन एक AJAX अनुरोध आवश्यक नहीं है या आमतौर पर इसकी आवश्यकता नहीं होती है।रिएक्ट डॉक्स घटक डीडमाउंट में AJAX करने की अनुशंसा क्यों करते हैं, घटक नहीं WillMount?

क्या देता है?

+0

@FurkanO मुझे लगता है कि वह घटक द्वारा प्रदान किए गए डीओएम तत्वों तक पहुंच का मतलब था। और वह पूरी तरह से सही है क्योंकि यदि आप 'घटक WillMount' में कहा तत्वों तक पहुंचने का प्रयास करना चाहते थे तो यह असफल हो जाएगा कि घटक ... माउंट नहीं किया गया था। – ZekeDroid

+0

@AlanH। मेरा प्रश्न हटा दिया गया है, बेशक आपके पास घटकडिडमाउंट पर डोम तक पहुंच है। यह एक नियम है, इसके बारे में बताने के लिए कुछ नहीं। धन्यवाद। – FurkanO

+0

मेरी राय में हम घटक के बाद अजाक्स फ़ंक्शन को क्यों कॉल करते हैं DidMount हमें पहले यह सुनिश्चित करना होगा कि एलिमेंट शुरुआत में आसानी से प्रस्तुत हो रहा है। इसके बाद हम AJAX कॉल कर सकते हैं। अगर हम पहले एजेक्स को कॉल करते हैं और कुछ त्रुटि होती है तो –

उत्तर

59

componentDidMount दुष्प्रभावों के लिए है। इवेंट श्रोताओं को जोड़ना, AJAX, डीओएम को म्यूट करना आदि।

componentWillMount शायद ही कभी उपयोगी है; विशेष रूप से यदि आप सर्वर साइड प्रतिपादन की परवाह करते हैं (ईवेंट श्रोताओं को जोड़ना त्रुटियों और रिसावों का कारण बनता है, और कई अन्य सामान जो गलत हो सकते हैं)।

कक्षा घटकों से componentWillMount को हटाने के बारे में बात है क्योंकि यह कन्स्ट्रक्टर के समान उद्देश्य प्रदान करता है। यह createClass घटकों पर बने रहेगा।

+1

प्रतिपादन पर समस्या होगी जिससे ईवेंट श्रोताओं को सर्वर पर त्रुटियों और लीक * हर समय *, या बस 'घटक WillMount' में) का कारण बनता है? मैं वास्तव में भेद नहीं देखता हूं। –

+17

@Alan - यदि आप दोनों क्लाइंटसाइड और सर्वरसाइड पर प्रतिक्रिया का उपयोग कर रहे हैं तो आप पाएंगे कि 'घटक WillMount' के अंदर कुछ भी सर्वरसाइड रेंडर पर निष्पादित किया जाएगा। वेरास यदि आप 'घटकडिडमाउंट' का उपयोग कर रहे थे तो उसे केवल क्लाइंटसाइड पर ही निष्पादित किया जाएगा। नतीजतन 'घटक WillMount' में चीजें डालने के परिणामस्वरूप बाहरी इंटरैक्शन या इवेंट आदि से जुड़ना, एक अच्छा विचार नहीं है। यदि आपके सर्वर सर्वर पर अपने घटकों को प्रस्तुत करने की कोई योजना नहीं है, तो यह अभी भी संभावित कोड पोर्टेबिलिटी के लिए एक अच्छा विचार नहीं है। यह मुख्य कारण है कि यह बुरा है जिसे @ डैनुला के जवाब में समझाया गया है। –

+3

घटक WillMount सर्वर पर चलाया जाता है, लेकिन घटक WillUnmount (जहां आप श्रोताओं को हटाते हैं) नहीं है। इससे आपको श्रोताओं को जोड़ना होगा और उन्हें कभी साफ नहीं करना होगा। – FakeRainBrigand

34

मुझे शुरुआत में भी यही समस्या थी। मैंने componentWillMount में अनुरोध करने का प्रयास करने का निर्णय लिया लेकिन यह विभिन्न छोटे मुद्दों में समाप्त हुआ।

जब मैं AJAX कॉल नए डेटा के साथ समाप्त होता हूं तो मैं प्रतिपादन ट्रिगर कर रहा था। किसी बिंदु पर घटक से प्रतिपादन सर्वर से प्रतिक्रिया प्राप्त करने में अधिक समय लगा और इस बिंदु पर AJAX कॉलबैक अनमाउंट घटक पर प्रस्तुत करना ट्रिगर कर रहा था। यह किनारे का मामला है लेकिन शायद अधिक है, इसलिए componentDidMount पर चिपकना सुरक्षित है।

+0

ठीक है, धन्यवाद। सोचा कि यह ऐसा कुछ हो सकता है, लेकिन आप सही हैं, यह आश्चर्य की बात है कि AJAX अनुरोध प्रस्तुत करने से पहले समाप्त हो सकता है। –

+1

@daniula क्या आप निश्चित हैं? प्रस्तुत करने से पहले AJAX अनुरोध कैसे समाप्त हो सकता है? –

+4

यह ब्राउज़र असीमित दुनिया है। आपको कभी यह नहीं मानना ​​चाहिए कि एक समारोह हमेशा बाकी के बाद तेज होगा। जैसा कि मैंने इसका एज केस का उल्लेख किया है और शायद इसका मतलब है कि आपको अपनी प्रतिपादन प्रक्रिया को अनुकूलित करना चाहिए लेकिन उचित जीवन चक्र विधि का उपयोग करके इस समय आपके जीवन को अधिक आसान बना दिया जाएगा। – daniula

3

दस्तावेज सेटिंग के अनुसार componentWillMount में राज्य पुन: प्रतिपादन को ट्रिगर नहीं करेगा। यदि AJAX कॉल अवरुद्ध नहीं हो रहा है और आप Promise लौटते हैं जो सफलतापूर्वक घटक की स्थिति को अपडेट करता है, तो संभावना है कि घटक प्रस्तुत होने के बाद प्रतिक्रिया आती है। componentWillMount एक पुन: प्रस्तुत करने के लिए ट्रिगर नहीं करता है, आपके पास अपेक्षित व्यवहार नहीं होगा जो अनुरोधित डेटा के साथ प्रस्तुत किया जा रहा घटक है।

यदि आप किसी भी फ्लक्स पुस्तकालयों का उपयोग करते हैं और स्टोर में समाप्त होने वाले डेटा का घटक घटक से जुड़ा हुआ है (या किसी कनेक्टेड घटक से प्राप्त होता है) तो यह कोई मुद्दा नहीं होगा क्योंकि उस डेटा का स्वागत होगा, अधिकतर संभावना है, अंततः प्रोप बदल जाते हैं।

+0

'घटक WillMount' फिर से प्रस्तुत नहीं करता है क्योंकि पहले प्रस्तुत करने से पहले एक नया राज्य परिभाषित किया जाता है। लेकिन अगर एजेक्स कॉलबैक में 'सेटस्टेट' कहा जाता है, तो इसे पहले प्रस्तुत करने के बाद सबसे निश्चित रूप से बुलाया जाएगा, और यह फिर से प्रस्तुत करने वाला ट्रिगर करेगा। – webdif

संबंधित मुद्दे