यह जवाबदेह और राय के बीच उस लाइन को फैलाने वाला हो सकता है, लेकिन मैं आगे और पीछे जा रहा हूं कि कैसे रिएक्टजेएस घटक को संरचना करना है क्योंकि जटिलता बढ़ती है और कुछ दिशा का उपयोग कर सकती है।
AngularJS से आने वाले, मैं अपने मॉडल को एक संपत्ति के रूप में घटक में पास करना चाहता हूं और घटक को सीधे मॉडल को संशोधित करना है। या क्या मुझे मॉडल को विभिन्न state
गुणों में विभाजित करना चाहिए और वापस ऊपर भेजते समय इसे एक साथ संकलित करना चाहिए? ReactJS तरीका क्या है?
एक ब्लॉग पोस्ट संपादक का उदाहरण लें। मॉडल को सीधे संशोधित करने की कोशिश कर रहा है:
var PostEditor = React.createClass({
updateText: function(e) {
var text = e.target.value;
this.props.post.text = text;
this.forceUpdate();
},
render: function() {
return (
<input value={this.props.post.text} onChange={this.updateText}/>
<button onClick={this.props.post.save}/>Save</button>
);
}
});
जो गलत लगता है।
क्या यह हमारी text
मॉडल संपत्ति बनाने के लिए और अधिक प्रतिक्रियाशील तरीका है state
, और इसे सहेजने से पहले मॉडल में वापस संकलित करें:
var PostEditor = React.createClass({
getInitialState: function() {
return {
text: ""
};
},
componentWillMount: function() {
this.setState({
text: this.props.post.text
});
},
updateText: function(e) {
this.setState({
text: e.target.value
});
},
savePost: function() {
this.props.post.text = this.state.text;
this.props.post.save();
},
render: function() {
return (
<input value={this.state.text} onChange={this.updateText}/>
<button onClick={this.savePost}/>Save</button>
);
}
});
इसके लिए कॉल की आवश्यकता नहीं है this.forceUpdate()
, लेकिन जैसे-जैसे मॉडल बढ़ता है, (एक पोस्ट में लेखक, विषय, टैग, टिप्पणियां, रेटिंग आदि हो सकते हैं ...) घटक वास्तव में जटिल होने लगता है।
जाने के लिए ReactLink के साथ पहली विधि है ?
text
क्षेत्र के बजाय , हमारे पास एकsetText
विधि है जो सत्यापन और कुछ अन्य सामान करती है। मैं विधि (2) को देख सकता हूं यदिsetText
शुद्ध है और मॉडल का एक नया उदाहरण देता है। हालांकि, अगरsetText
सिर्फ आंतरिक स्थिति को अपडेट करें तो हमें कॉल करने की आवश्यकता होगीforceUpdate
, है ना?