2016-07-06 15 views
5

मैंने कुछ समय के लिए ReactJS सीख लिया है। एक चीज जो मुझे पहेली बनाती है, यही कारण है कि रेक्टजेएस प्रोप, तत्व इत्यादि जैसे कई पहलुओं में अपरिवर्तनीयता का उपयोग करता है। क्या इसके लिए कोई विशिष्ट कारण है? इसके पीछे दर्शन क्या है?ReactJS और अपरिवर्तनीयता

जब मैं props पर नई संपत्ति जोड़ने की कोशिश करता हूं तो मुझे निम्न त्रुटि मिल रही है।

Uncaught TypeError: संपत्ति मुझे नहीं जोड़ा जा सकता, वस्तु एक्स्टेंसिबल नहीं है

उत्तर

3

प्रतिक्रिया स्पष्ट प्रदर्शन कारणों के लिए अपरिवर्तनीयता का उपयोग करती है।

आइडिया है उदाहरण के लिए जब भी आप एक राज्य की स्थापना कर रहे हैं, आप एक राज्य उत्परिवर्तित न, लेकिन आप इसे का एक हिस्सा क्लोन और फिर राज्य

उदाहरण

this.state = { 
entries: [1,2,3] 
} 

आप

क्या करना चाहिए के लिए अद्यतन
this.state.setState({ 
entries: this.state.entries.slice().push(9); //not this.state.entries.push(9) 
}) 

प्रदर्शन लाभ प्राप्त कर रहे हैं जब आप shouldComponentUpdate

012 का उपयोग

shouldComponentUpdate में आप सिर्फ संदर्भ तुलना कर सकते हैं और वजह से नहीं गहरी जाँच

shouldComponentUpdate(prevState,newState){ 
    return prevState.entries != newState.entries 

} 
+0

क्या आप थोड़ा अधिक वर्णन कर सकते हैं कि हम वास्तव में यहां क्या प्रदर्शन लाभ प्राप्त करते हैं? – VJAI

+0

डेटा के आकार और अन्य घटकों की कमी पर विचार करते हुए, इस विशेष उदाहरण में शायद अधिक नहीं। घटकों के एक से अधिक पेड़ों के साथ एक बड़े अनुप्रयोग में जब कोई भी घटक पेड़ अद्यतन नहीं होता है तो राज्य में परिवर्तन फिर से प्रस्तुत करने के दौरान अनुप्रयोग प्रदर्शन में काफी वृद्धि कर सकता है। –

5

इसके पीछे दर्शन एक ही रास्ता डाटा प्रवाह है - डेटा (पत्ती घटकों के लिए शीर्ष स्तर से) नीचे बहता है और कार्यों अप प्रवाह।

एक घटक प्रोप से अपना डेटा प्राप्त करता है, और कुछ बदलने के लिए, इसे अपने माता-पिता से कॉल करना पड़ता है और इसे कॉलबैक फ़ंक्शन के माध्यम से कुछ बदलने के लिए कहा जाता है।

आप आधिकारिक वेबसाइट के Thinking in React पृष्ठ पर इसके बारे में और अधिक पढ़ सकते हैं, यह अवधारणा को अच्छी तरह से बताता है।

+2

मुझे लगता है कि दिशाहीन डाटा प्रवाह जोड़ना चाहते हैं ज्यादा दो तरह बाइंडिंग की तुलना में अधिक उम्मीद के मुताबिक है। उत्तरार्द्ध अवधारणा को समझना आसान हो सकता है, लेकिन पूर्व डिबगिंग/भविष्यवाणी की आसानी से जीतता है। – lux