当this.state.selected
更改时,选择框会正确更改其值,但不会调用其onChange
方法。这可能是因为我需要双向绑定,所以我尝试了the docs中的valueLink
模式,但它仍然没有被解雇:
render: function() {
return (
React.createElement("select", { valueLink: { value: this.state.selected, requestChange: this.changeHandler } },
React.createElement("option", { value: 1 }, "1"),
React.createElement("option", { value: 2 }, "2")
)
)
}
查看整个小提琴:http://jsbin.com/tisahiliqi/1/edit?html,output
我如何在没有手动触发事件的情况下执行requestChange
执行(在我看来,我应该为双向绑定做什么)?
我误解了什么吗?
答案 0 :(得分:3)
您的代码与React的LinkedStateMixin
混淆了一些。如果要激活自己的事件处理程序,可以使用:
http://jsbin.com/fuwowifoqe/1/
var MySelect = React.createClass({
getInitialState: function() {
return { selected: 1 }
},
componentDidMount: function() {
// Imagine some AJAX that takes 1s
window.setTimeout(function() {
this.setState({ selected: 2 });
}.bind(this), 1000);
},
changeHandler: function(e) {
// ... Doesn't fire...
alert("Something changed!");
this.setState({selected : e.target.value })
},
render: function() {
return (
React.createElement("select", { value: this.state.selected, onChange: this.changeHandler },
React.createElement("option", { value: 1 }, "1"),
React.createElement("option", { value: 2 }, "2")
)
)
}
});
React.render(React.createElement(MySelect, null, "Hi"), document.getElementById("app"));
请注意,当您使用setState
更改值时,不会触发处理程序,但是当通过用户交互更改值时。
<强>更新强>
然后,您可以使用this.state
或this.state.selected
之类的生命周期方法观察对componentWillUpdate
或componentDidUpdate
的更改:
jsbin:http://jsbin.com/lipovucapi/1/
componentDidUpdate: function(prevProps, prevState){
if(this.state.selected != prevState.selected)
alert("selected changed!");
},