我很好奇如何实现主/从复选框系统。我目前采用的方法是在主/从复选框之间建立所有者/所有者(父/子)关系。但是,如果复选框是兄弟姐妹,我很好奇是否有办法在 React 中完成此操作。我在文档中看到它说要使用您自己的全局事件系统。有人可以解释/给我看一个例子来说明他们的意思吗?谢谢!
问问题
1000 次
2 回答
0
在我的 Backbone+React 应用程序中,当我没有任何其他选项在组件之间传达状态时,我使用主干事件。我敢肯定,如果需要,您可以找到其他最小事件库或构建自己的事件库来传达事件。
下面是来自 jsFiddle http://jsfiddle.net/kb3gN/2239/的示例代码,我为您的场景提供了。
从“MasterCheckbox”组件的 onChange 事件中,我在其他组件/视图可以访问的事件对象上触发了一个全局应用程序范围的“checkbox:clicked”事件。
//Global event object
window.App = _.extend({}, Backbone.Events);
//MasterCheckbox component's change handler
handleChange: function () {
this.setState({checked: this.refs.master.getDOMNode().checked});
App.trigger('checkbox:clicked', this.refs.master.getDOMNode().checked);
}
然后在“SlaveCheckbox”组件上订阅该事件并更改
“SlaveCheckbox”组件的状态
componentDidMount: function(){
App.on('checkbox:clicked', function(state){this.setState({checked: state}) }.bind(this));
}
于 2014-05-08T11:26:20.877 回答
0
您可以将这两个复选框包装到它们自己的组件中以制作 MasterSlaveComponent。不确定您想要的确切功能,但这里有一个打开 Master 也会打开 Slave 的示例。
var MasterSlaveCheckbox = React.createClass({
getInitialState: function(){
return {
master: false,
slave: false
}
},
handleMasterChange: function() {
var newMasterState = !this.state.master;
if(newMasterState) {
this.setState({master: true, slave: true});
} else {
this.setState({master: false});
}
},
handleSlaveChange: function() {
this.setState({slave: !this.state.slave});
},
render: function() {
return <div>
<div>
<input type="checkbox" checked={this.state.master} onChange={this.handleMasterChange} />
Master
</div>
<div>
<input type="checkbox" checked={this.state.slave} onChange={this.handleSlaveChange} />
Slave
</div>
</div>;
}
});
于 2015-05-14T21:05:29.413 回答