我有一张桌子,其目的是为了显示来宾,并带有复选标记以指示他们是否参加。我有麻烦想办法将状态从子组件传递给父组件,同时保持它来自哪个子组件的标识。将多个子状态更改传回父级以进行保存
每一行是像下面
GuestRow = React.createClass({
getInitialState() {
return {
attending: this.props.data.attending,
plusOneAttending: this.props.data.plusOneAttending
}
},
handleCheckboxChange(field, event) {
if(field == 'plusOne') {
this.setState({
plusOneAttending: event.target.checked
});
}
else if (field == 'guest') {
this.setState({
attending: event.target.checked
});
}
else {
console.log("error third option for field");
}
},
plusOneRow() {
return (
this.props.data.hasPlusOne ?
<input type="checkbox"
name="plusOneAttending"
defaultChecked={this.state.plusOneAttending}
onChange={this.handleCheckboxChange.bind(this, 'plusOne')} /> : <span>Sorry you don't have a plus one</span>
)
},
render(){
return(
<tr>
<td>
<span>{this.props.data.name}</span>
</td>
<td>
<input type="checkbox"
name="attending"
defaultChecked={this.state.attending}
onChange={this.handleCheckboxChange.bind(this, 'guest')} />
</td>
<td>
{this.plusOneRow()}
</td>
</tr>
);
}
});
这些被渲染到父表容器,其是
RsvpForm = React.createClass({
getInitialState() {
return {
guests: this.props.data.guests
}
},
saveChanges(event) {
event.preventDefault();
//console.log(test);
},
render() {
var guestRows = this.state.guests.map(function(guest){
return (
<GuestRow callBackToParent={this.onChildChange} data={guest} />
)
}, this);
return (
<div id="rsvp">
<span>Welcome {this.props.data.invitationName}! Thank you for taking part in our wedding!</span>
<br />
<table>
<thead>
<tr>
<th>Guest</th>
<th>Are you attending?</th>
<th>Plus one?</th>
</tr>
</thead>
{guestRows}
</table>
<br />
<button onClick={this.saveChanges}>Save!</button>
</div>
)
}
});
的guests
对象看起来像以下的成分。该示例只有一个访客,但它可以是一个有唯一PID的有效访客数组。
guests: [
{
pid: new Meteor.Collection.ObjectID(),
name: "Joe Somebody",
attending: true,
hasPlusOne: true,
plusOneAttending: false
}
我想过加入个人guest
记录的状态到母部件,但它怎么会何时guests
比2+记录更大的工作。我是否动态添加更多状态项目?或者我应该使用ref从子组件中提取数据。但是,如何唯一标识每一个,并确保我正在更新MongoDb上的正确记录?
更多地考虑到这个问题,Flux具有很大的意义。但我喜欢你如何使用绑定来将'(id,event)'一起传递,以保持更改正确分配。 – tyh
我也会使用与Flux的绑定,这是一个非常方便的模式,可以让事情更加分离。 –