Cela peut marcher sur cette ligne entre responsable et opiniâtre, mais je vais et vient sur la façon de structurer un composant ReactJS à mesure que la complexité augmente et pourrait utiliser une certaine direction.
Venant d'AngularJS, je souhaite transmettre mon modèle au composant en tant que propriété et demander au composant de modifier directement le modèle. Ou devrais-je diviser le modèle en différentes statepropriétés et le recompiler lors du renvoi en amont? Quelle est la manière ReactJS?
Prenons l'exemple d'un éditeur d'articles de blog. Essayer de modifier le modèle finit directement par ressembler à:
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>
);
}
});
Ce qui semble faux.
Est-ce plus la manière React de créer notre textpropriété de modèle stateet de la recompiler dans le modèle avant de l'enregistrer comme:
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>
);
}
});
Cela ne nécessite pas d'appel this.forceUpdate(), mais au fur et à mesure que le modèle grandit (un article peut avoir un auteur, un sujet, des balises, des commentaires, des notes, etc.), le composant commence à devenir vraiment compliqué.
La première méthode avec ReactLink est-elle la voie à suivre?

textchamp, nous ayons unesetTextméthode qui effectue la validation et d'autres choses. Je peux voir la méthode (2) fonctionner si ellesetTextest pure et renvoie une toute nouvelle instance du modèle. Cependant, sisetTextnous mettions simplement à jour l'état interne, nous aurions encore besoin d'appelerforceUpdate, non?