我建议使用单一数据流模式(如Flux或Reflux)来构建您的反应应用程序,并避免这种错误和复杂的反向数据流。
从我对你的问题的理解来看,没有Flux,你可以做这样的事情。
var React = require("react");
var ParentComponent = React.createClass({
handleChange: function(newOption){
console.log("option in child component changed to " + newOption);
},
render: function(){
return (
<div>
<ChildComponent handleChange={this.handleChange}/>
</div>
)
}
});
var ChildComponent = React.createClass({
getInitialState: function(){
return {
selectedOption: 0
};
},
handleChange: function(){
var option = this.refs.select.getDOMNode().value;
this.setState({ selectedOption: option});
// I'm passing the actual value as an argument,
// not this.state.selectedOption
// If you want to do that, do it in componentDidUpdate
// then the state will have been set
this.props.handleChange(option);
},
render: function(){
return (
<div>
<h4>My Select</h4>
{this.state.selectedOption}
<select ref="select"
onChange={this.handleChange}>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</div>
)
}
});
编辑 增加了几个被遗忘的分号。这些天我编写的Python太多了。
编辑2 更改了代码。您的问题可能是,如果您使用来自状态(this.state.selectedOption
)的值调用父级的handleChange,则状态将不会被设置,因此您必须将实际值作为参数。如果您真的想使用this.state.selectedOption
,请拨打componentDidUpdate致电父母的handleChange
。
需要代码.......... *在僵尸声音* – mccainz
我喜欢更多的理论方法来解决这个问题,这就是为什么我没有发布任何代码。否则可能会建议所有类型的非工作解决方案。 – Galya
我想你会发现,如果你可以将问题简化为一个非常基本的例子(并将其与你的问题一起呈现),那么你会得到比其他答案更好的答案。 – mccainz