Réagir: Comment puis-je mettre à jour l'état.l'article[1] sur setState? (avec JSFiddle)

Je suis la création d'une application où l'utilisateur peut concevoir son propre formulaire. E. g. spécifier le nom du champ et des détails sur d'autres colonnes qui doivent être inclus.

Le composant est disponible comme un JSFiddle ici.

Mon état initial ressemble à ceci:

var DynamicForm = React.createClass({
  getInitialState: function() {
   var items = {};
   items[1] = { name: 'field 1', populate_at: 'web_start',
                same_as: 'customer_name',
                autocomplete_from: 'customer_name', title: '' };
   items[2] = { name: 'field 2', populate_at: 'web_end',
                same_as: 'user_name', 
                    autocomplete_from: 'user_name', title: '' };

     return { items };
   },

  render: function() {
     var _this = this;
     return (
       <div>
         { Object.keys(this.state.items).map(function (key) {
           var item = _this.state.items[key];
           return (
             <div>
               <PopulateAtCheckboxes this={this}
                 checked={item.populate_at} id={key} 
                   populate_at={data.populate_at} />
            </div>
            );
        }, this)}
        <button onClick={this.newFieldEntry}>Create a new field</button>
        <button onClick={this.saveAndContinue}>Save and Continue</button>
      </div>
    );
  }

Je veux mettre à jour l'état lorsque l'utilisateur modifie une de ces valeurs, mais je vais avoir un moment difficile de cibler le bon objet:

var PopulateAtCheckboxes = React.createClass({
  handleChange: function (e) {
     item = this.state.items[1];
     item.name = 'newName';
     items[1] = item;
     this.setState({items: items});
  },
  render: function() {
    var populateAtCheckbox = this.props.populate_at.map(function(value) {
      return (
        <label for={value}>
          <input type="radio" name={'populate_at'+this.props.id} value={value}
            onChange={this.handleChange} checked={this.props.checked == value}
            ref="populate-at"/>
          {value}
        </label>
      );
    }, this);
    return (
      <div className="populate-at-checkboxes">
        {populateAtCheckbox}
      </div>
    );
  }
});

Comment dois-je l'artisanat this.setState à obtenir pour la mise à jour items[1].name ?

  • Il n'y a aucune indication de la manière dont lePopulateAtCheckboxes composant dans votre édité question est liée à la DynamicForm composant qui tient l'état vous êtes en train d'éditer.
  • veuillez voir mon code mis à jour.
  • lié - stackoverflow.com/q/26253351/104380
InformationsquelleAutor martins | 2015-04-09