이것은 대답 할 수있는 것과 의견이있는 것 사이의 경계를 넘을 수 있지만 복잡성이 커지고 어떤 방향을 사용할 수있을 때 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
다음과 같이 저장하기 전에 모델로 다시 컴파일하는 것이 React 방법입니까?
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
유효성 검사 및 기타 작업을 수행 하는 메서드가 있다고 가정합니다 .setText
순수한 경우 메서드 (2)가 작동 하고 모델의 새로운 인스턴스를 반환하는 것을 볼 수 있습니다. 그러나setText
내부 상태 만 업데이트하는 경우 에도을 호출해야합니다forceUpdate
.