นี่อาจเป็นการเหยียบเส้นแบ่งระหว่างคำตอบและความเห็น แต่ฉันจะกลับไปกลับมาถึงวิธีการจัดโครงสร้างส่วนประกอบ ReactJS เมื่อความซับซ้อนเพิ่มขึ้นและสามารถใช้ทิศทางบางอย่างได้
มาจาก 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
ใช่ไหม?