onChange 事件不会改变 <select> React 中的状态

onChange event doesn't change state in <select> React

如标题所示,我在 React 中为 <select> 元素设置了一个 onChange 事件,但是当我更改下拉列表中的选项时它不会触发。
我设置初始状态,用 this.setState() 更新状态并用 2 个 onChange 事件测试它,1 个用于文本输入,另一个用于 <select>.

仅更新​​文本输入的状态。这意味着只有文本输入称为 onChange 事件。

谁能帮我弄清楚为什么会这样?

ServicesPage = React.createClass({
mixins: [ReactMeteorData],

getMeteorData() {
    var accountId = Meteor.userId();
    return {
        services: Services.find({ accountId: accountId }).fetch(),
        sites: Sites.find({ accountId: accountId }).fetch()
    }
},

getInitialState() {
    return {
        selected: "0",
        test: 'Hello'
    }
},

handleChangeLocation(e) {
    this.setState({ selected: e.target.value });
},

handleChange(event) {
    this.setState({ test: event.target.value});
    console.log(this.state.test);
},

componentDidMount() {
    $('select').material_select();
    console.log(this.state.selected);
},

render() {
    var sitesList = [];
    for (var i = 0; i < this.data.sites.length; i++) {
        sitesList.push(<option key={i} value={this.data.sites[i]._id}>{this.data.sites[i].name}</option>);
    }

    return (
        <div>
            <input type="text" value={this.state.test} onChange={this.handleChange} />
            <h4>Services Page</h4>
            <div className="row">
                <div className="col s12 m6 l6">
                    <select value={this.state.selected} onChange={this.handleChangeLocation}>
                        <option value="0">Choose location</option>
                        {sitesList}
                    </select>
                </div>
            </div>
        </div>
        )
    }
})

material_select 插入它自己的 DOM 元素并隐藏现有的 <select> 层次结构。 React 元素对此一无所知,因为它们仅在虚拟 DOM 级别工作。因此 material_select 破坏了 React 虚拟 DOM 和真实 DOM 之间的联系。

几乎所有 JQuery 插件都是这种情况,因此它们大多与 React 不兼容。您可能想改用 material-ui React 组件。