Bu, cevap verilebilir ve düşünülmüş arasındaki çizgiyi aşıyor olabilir, ancak karmaşıklık büyüdükçe ve bir yöne ihtiyaç duydukça bir ReactJS bileşeninin nasıl yapılandırılacağı konusunda ileri geri gidiyorum.
AngularJS'den geliyorum, modelimi bileşene bir özellik olarak geçirmek ve bileşenin modeli doğrudan değiştirmesini istiyorum. Veya modeli çeşitli state
özelliklere ayırmalı ve yukarı akışa geri gönderirken tekrar birlikte mi derlemeliyim? ReactJS yolu nedir?
Bir blog yazısı düzenleyici örneğini ele alalım. Modeli doğrudan değiştirmeye çalışmak şuna benzer:
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>
);
}
});
Yanlış görünüyor.
text
Model özelliğimizi yapmanın state
ve aşağıdaki gibi kaydetmeden önce modele geri derlemenin daha çok React yolu mu?
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>
);
}
});
Bu bir çağrı gerektirmez this.forceUpdate()
, ancak model büyüdükçe (bir gönderinin bir yazarı, konusu, etiketleri, yorumları, derecelendirmeleri vb. Olabilir) bileşen gerçekten karmaşıklaşmaya başlar.
text
alan yerinesetText
doğrulama ve diğer bazı şeyler yapan bir yöntemimiz olduğunu varsayalım .setText
Safsa ve modelin yepyeni bir örneğini döndürdüğünde çalışan yöntemin (2) çalıştığını görebiliyorum . Ancak,setText
sadece iç durumu güncellerse, yine de aramamız gerekirforceUpdate
, değil mi?