ReactJS état vs prop

Cela peut être écrasant que la ligne entre la responsable et opiniâtre, mais je vais d'avant en arrière à la façon de structurer un ReactJS composante de la complexité se développe et pourrait utiliser une certaine direction.

Venant de AngularJS, je veux passer mon modèle dans le composant en tant que bien et ont le composant à modifier le modèle directement. Ou devrais-je être le fractionnement du modèle en différentes state propriétés et la compilation de retour ensemble lors de l'envoi de retour en amont? Qu'est-ce que le ReactJS façon?

Prenons l'exemple d'un blog de l'éditeur. En essayant de modifier le modèle directement finit 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>
    );
  }
});

Qui semble erroné.

Est-il le plus Réagir de la façon de faire de notre text modèle de propriété state, et de les compiler en arrière 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 un appel à this.forceUpdate(), mais comme le modèle se développe, (un poste peut avoir un auteur, sujet, tags, commentaires, notes, etc...) le composant commence à devenir vraiment compliqué.

Est la première méthode avec ReactLink le chemin à parcourir?

InformationsquelleAutor nicholas | 2014-05-05