更新深度ReactJS状态

我要遍历创建表单的ReactJS组件状态下有一系列项目。我的问题是:当字段更改时,如何最好地更新那些项目?

例如:

var items = this.state.foo.bar.items.map(function(item, i) {

return <input value={item.baz} onChange={??}

});

在这种情况下,我的onChange处理程序是什么样的?那我item.baz直接更改属性this.setState(state)吗?似乎不对。我正在查看React不变性助手,但请参阅如何使用数组索引。

谢谢。

回答:

您可以使用索引来更新正确的数组项,方法是将其传递给onChangevia bind,然后动态构建要传递给的对象update

var Hello = React.createClass({

getInitialState : function() {

return {

foo : {

bar : {

items : [ { baz : 1 }, { baz : 2 }, { baz : 3 } ]

}

}

};

},

onChange : function( idx, item, event ) {

var objForUpdate = { foo: { bar: { items : {} } } };

objForUpdate.foo.bar.items[ idx ] = { $set : { baz : event.target.value } };

var newData = React.addons.update( this.state, objForUpdate );

this.setState( newData );

},

render: function() {

var _this = this;

var items = this.state.foo.bar.items.map(function(item, i) {

return <input value={item.baz} onChange={_this.onChange.bind( _this, i, item )}></input>

});

return <div>{items}</div>;

}

});

我的理解是,这仅比诸如此类的优势

onChange : function( idx, item, event ) {

item.baz = event.target.value;

this.setState( this.state );

}

如果您要覆盖shouldComponentUpdate并且在何时重新渲染比每次this.setState()调用都更具选择性。

jsfiddle

以上是 更新深度ReactJS状态 的全部内容, 来源链接: utcz.com/qa/398372.html

回到顶部