两个handleChange事件在react js中使用多个select选项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个handleChange事件在react js中使用多个select选项相关的知识,希望对你有一定的参考价值。
我正在尝试使用两个句柄更改函数来编写(两个)多个选定的选项,我认为这不是一个好习惯,因为我必须分别绑定这些数据而不会干扰其他多个选定选项。
import React, { Component } from 'react';
class AddEvent extends Component {
constructor() {
super();
this.state = {
speaker: [''],
hash_tag: ['']
};
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
var options = event.target.options;
var value = [];
for (var i = 0, l = options.length; i < l; i++) {
if (options[i].selected) {
value.push(options[i].value);
}
}
this.setState({ value: value });
}
handleChange(event2) {
var options2 = event2.target.options;
var value2 = [];
for (var j = 0, l = options2.length; j < l; j++) {
if (options2[j].selected) {
value2.push(options2[j].value);
}
}
this.setState({ value: value2 });
}
render() {
return (
<div className="col-md-12">
<h3>Add Events</h3>
<form onSubmit={this.handleSubmit}>
<div className="col-md-6">
<div className="form-group">
<label>Event Speaker:</label>
<select
data-style="btn-default"
className="form-control"
multiple
data-max-options="3"
value={this.state.value}
onChange={this.handleChange}
>
<option value="Vivek Srinivasan">Vivek Srinivasan</option>
<option value="Salma Moosa">Salma Moosa</option>
<option value="Rengaprasad">Rengaprasad</option>
</select>
</div>
</div>
<div className="col-md-6">
<div className="form-group">
<label>Event Hash Tags:</label>
<select
data-style="btn-default"
className="form-control"
multiple
data-max-options="3"
value={this.state.value}
onChange={this.handleChange2}
>
<option value="hash_tag_1">hash_tag_1</option>
<option value="hash_tag_2">hash_tag_2</option>
<option value="hash_tag_3">hash_tag_3</option>
<option value="hash_tag_4">hash_tag_4</option>
<option value="hash_tag_5">hash_tag_4</option>
</select>
</div>
</div>
<div className="col-md-12">
<div className="form-group">
<label>Event Content</label>
<textarea
id="summernote"
value="Type Here "
onChange={val => this.setState({ content: val.target.value })}
/>
</div>
</div>
<div className="col-md-3">
<button className="btn btn-block btn-primary btn-lg" type="submit">
Save Event
</button>
</div>
</form>
</div>
);
}
}
export default AddEvent;
答案
我不太明白为什么你不想为每个select元素使用不同的处理程序。特别是因为你已经编写了两个处理函数。也许我误解了你的问题。
正如我所看到的,你有三个主要问题。
1)与handleChange一样,不能有两个具有相同名称的函数。
2)在当前代码中,您引用了一个不存在的函数(handleChange2)。
3)在两个handleChange函数中,您将覆盖状态中的value属性与另一个,因为两者都在更改状态中的属性值。
将后一个handleChange函数重命名为handleChange2将解决问题1和2。
第三个问题可以通过在您的州中拥有两个值属性来解决,例如: value1和value2(虽然我建议使用更具描述性的名称)。
以上是关于两个handleChange事件在react js中使用多个select选项的主要内容,如果未能解决你的问题,请参考以下文章
React Formik Field onChange 事件句柄
尝试使用 Typescript 在简单的 React 表单组件中使用 handleChange。难以访问 e.target.value
在 react 组件中的 handleChange(e) 函数中使用“e”来访问文本框值是不是有任何替代方法? [复制]