当值改变时,HTML select onChange不会触发

时间:2015-02-09 12:46:56

标签: reactjs

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执行(在我看来,我应该为双向绑定做什么)?

我误解了什么吗?

1 个答案:

答案 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.statethis.state.selected之类的生命周期方法观察对componentWillUpdatecomponentDidUpdate的更改:

jsbin:http://jsbin.com/lipovucapi/1/

componentDidUpdate: function(prevProps, prevState){  
    if(this.state.selected != prevState.selected)
        alert("selected changed!");
},