简体   繁体   English

在React中的父子之间传递表单状态

[英]Passing form state in between parent and child in React

What is a good way of passing form values from a child back to a parent in React? 在React中将表单值从孩子传递回父母的好方法是什么?

Let's say we have the following example: 假设我们有以下示例:

 var Parent = React.createClass({ render: function () { <Child data={this.state.data[this.state.currentChild]}/> }, getInitialState : function () { return { data: [{ field1: 'Text', field2: 'Text2' }], currentChild: 0 } } }); var Child = React.createClass({ render: function () { <div> <input name="field1" value={this.props.data.field1} onChange={this.passBackChanges}/> <input name="field2" value={this.props.data.field2} onChange={this.passBackChanges}/> </div> }, passBackChanges: function () { } }); 

I tried passing in an onChange handler from the parent (which fires on passBackChanges and in turn updates the Parent's state. However when alternating between the the different children from Parent (changing currentChild index), the changes don't seem to reflect. 我想传递一个onChange从父(其触发的处理程序passBackChanges并依次更新家长的状态,但是从不同的儿童之间的交流时Parent (改变currentChild指数),似乎所做的更改不会反映。

 var Parent = React.createClass({ render: function () { <Child data={this.state.data[this.state.currentChild]} onChange={this.updateState}/> }, getInitialState : function () { return { data: [{ field1: 'Text', field2: 'Text2' }], currentChild: 0 } }, updateState: function (state) { this.state.data[this.state.currentChild] = state; this.setState({ data: this.state.data }) } }); var Child = React.createClass({ render: function () { <div> <input ref="field1" value={this.props.data.field1} onChange={this.passBackChanges}/> <input ref="field2" value={this.props.data.field2} onChange={this.passBackChanges}/> </div> }, passBackChanges: function () { this.props.onChange({ field1: this.refs.field1.getDOMNode().value, field2: this.refs.field2.getDOMNode().value }); } }); 

setState is the only way to handle state changes. setState是处理状态更改的唯一方法。

  updateState (state) { let newState = this.state.data; newState[this.state.currentChild] = state; this.setState({ data: newState }) } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM