2015-04-22 5 views
11

मैं खुद को एक घटक पर राज्य को जोड़ता हूं। आम तौर पर मुझे पता है कि नोड मैं फिर से प्रस्तुत कर दूंगा ताकि परिवर्तन प्रचार कर सकें और राज्य पूरी जगह पर न हो। हाल ही में, मैंने अपने हिस्से को JSX spread attributes का उपयोग करके अपने पहले बच्चों के प्रोप के रूप में इस घटक की स्थिति को पारित कर लिया है। बस बिल्कुल स्पष्ट होना करने के लिए है, यह मैं क्या मतलब है:बच्चों को प्रोप के रूप में राज्य पारित करने के लिए अच्छा अभ्यास है?

var Child = React.createClass({ 
    handleClick: function(){ 
    this.props.owner.setState({ 
     count: this.props.count + 1, 
    }); 
    }, 
    render: function(){ 
    return <div onClick={this.handleClick}>{this.props.count}</div>; 
    } 
}); 

var Parent = React.createClass({ 
    getInitialState: function(){ 
    return { 
     count: 0, 
     owner: this 
    }; 
    }, 
    render: function(){ 
    return <Child {...this.state}/> 
    } 
}); 

और यह काम करता है (http://jsbin.com/xugurugebu/edit?html,js,output), तो आप हमेशा क्या हो रहा समझते हैं और राज्य के रूप में कम से कम रखने के लिए इस घटक के लिए वापस जा सकते हैं।

तो वास्तविक सवाल यह है कि, यदि यह एक अच्छा अभ्यास नहीं है और क्यों।

इस समय के बारे में मैं सोच सकता हूं कि इस दृष्टिकोण के साथ मालिक के राज्य में परिवर्तन होने पर हर बच्चे का घटक हमेशा फिर से प्रस्तुत करेगा, अगर ऐसा लगता है कि उपर्युक्त उपरोक्त उपयोग करने के लिए कुछ है छोटे घटक पेड़।

+0

यह बहुत ही अनुसूचित और आसान नहीं है कि बच्चों को क्या भेजा जा रहा है जब माता-पिता सभी स्थानीय राज्यों को पारित कर रहे हैं जैसा आपने स्प्रेड विशेषताओं के साथ किया है। वास्तव में, घटक की जटिलता के आधार पर, क्या भेजा जा रहा है इसके बारे में तर्क करना मुश्किल हो सकता है। मुझे आश्चर्य होगा कि बच्चे को वास्तव में सभी माता-पिता के राज्य की ज़रूरत है। – WiredPrairie

+0

हां, यह स्थिति पर निर्भर करेगा। यह देखने के लिए कि आपको क्या भेजा जा रहा है, आपको केवल माता-पिता को देखना होगा। मुझे यह कारण क्यों है कि यह स्पष्ट है कि राज्य कहां से आता है और प्रस्तुत करता है। – stringparser

+0

यदि माता-पिता को स्थानीय रूप से परिभाषित किया गया है, तो यह आसान है। लेकिन चूंकि एक परियोजना गुंजाइश में बढ़ती है, और कई प्रकार के माता-पिता द्वारा एक घटक का उपयोग किया जाता है, चुनौती बढ़ सकती है। – WiredPrairie

उत्तर

8

हाँ!

राज्य केवल शीर्ष स्तर के तत्व पर सेट किया जाना चाहिए, यह सुनिश्चित करता है कि डेटा केवल आपके घटकों के माध्यम से एक तरफ बहता है।

ध्यान रखें, प्रतिक्रिया केवल अंतिम प्रस्तुत करने के बाद से किए गए परिवर्तनों को प्रस्तुत करेगी, अगर आपके बच्चे के तत्वों के कुछ हिस्सों में संशोधन नहीं किया गया है तो उन्हें डीओएम को फिर से प्रस्तुत नहीं किया जाएगा।

प्रतिक्रिया lifting up state शीर्षक वाले उनके दस्तावेज़ों में एक अनुभाग है।

+0

सही! मैंने diffs के बारे में सोचा नहीं था। तो आप जो कह रहे हैं वह यह है कि diff एल्गोरिदम पुन: प्रस्तुत करने की भावना का ख्याल रखेगा, भले ही यह प्रचारित हो जाए, यह केवल डीओएम को फिर से प्रस्तुत करना सुनिश्चित करेगा कि ** वास्तव में ** कुछ बदलाव है। मुझे लगता है कि अगर यह छड़ें मैं सामान को माप दूंगा और इस दृष्टिकोण के साथ क्या होता है तो ऐसा करने के लिए ऐसा लगता है। – stringparser

+0

@stringparser सही। प्रतिक्रिया किसी वर्चुअल डॉम का उपयोग किसी भी बदलाव को अलग करने के लिए करती है। फिर ये परिवर्तन, और केवल इन परिवर्तनों को वास्तविक डोम में प्रस्तुत किया जाना है। Jsperf पर कई प्रतिक्रिया प्रतिपादन परीक्षण हैं जैसे http://jsperf.com/react-vs-pure-js/9 –

+0

धन्यवाद, आदमी। यह चीजों को स्पष्ट करता है। – stringparser

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

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