reactjs - 如果页面上有很多,如何更改 1 选择的值
问题描述
如果页面上有很多,如何更改 1 select 的值。我在表 col 中有 8 个选择,每个选择都必须单独更改。我不明白如何分别为每个执行此操作。当我选择意见时,所有选择都会改变值。
import React, { Component } from "react";
import MenuItem from "@material-ui/core/MenuItem";
import FormControl from "@material-ui/core/FormControl";
import Select from "@material-ui/core/Select";
export default class Demo extends Component {
state = {
productTaxes: [
{ label: "Tax 8%", value: 10 },
{ label: "Tax 23%", value: 11 }
],
selected: "10",
};
handleSelect = (e, key, type) => {
this.setState({
selected: e.target.value
});
};
render() {
return (
<div>
<FormControl>
<Select
name={1}
value={10}
onChange={e => this.handleSelect(e, "tax")}
>
{this.state.productTaxes.map((tax, i) => {
return (
<MenuItem key={i} value={tax.value}>
{tax.label}
</MenuItem>
);
})}
</Select>
</FormControl>
<FormControl>
<Select
name={2}
value={this.state.selected}
onChange={e => this.handleSelect(e, "tax")}
>
{this.state.productTaxes.map(tax => {
return (
<MenuItem key={`tax${tax.value}`} value={tax.value}>
{tax.label}
</MenuItem>
);
})}
</Select>
</FormControl>
</div>
);
}
}
解决方案
每个选择都需要单独的状态。您可以使用name
来自的属性select
,
<Select
name="select1"
value={this.state.select1}
onChange={e => this.handleSelect(e, "tax")}
>
{this.state.productTaxes.map((tax, i) => {
return (
<MenuItem key={i} value={tax.value}>
{tax.label}
</MenuItem>
);
})}
</Select>
您可以对所有选择执行相同的操作。
你的handleSelect
功能应该是,
handleSelect = (e, key, type) => {
this.setState({
[e.target.name]: e.target.value
});
};
注意:避免使用数字表示name
,这不是一个好习惯。使用更具体的字符串名称。
另一件事是,除非必要,否则不要将额外的参数传递给函数,
onChange={e => this.handleSelect(e, "tax")}
这可以简化为,
onChange={this.handleSelect}
你的功能可以是,
handleSelect = (e) => { ... }
也不要重复代码。如果你觉得代码被重复了,那么你总是可以将该部分分配给一个变量并使用该变量,
render(){
const options = this.state.productTaxes.map((tax, i) => {
return (
<MenuItem key={i} value={tax.value}>
{tax.label}
</MenuItem>
);
});
return(
...
<Select
name="select1"
value={this.state.select1}
onChange={e => this.handleSelect(e, "tax")}
>
{options}
</Select>
...
)
}
推荐阅读
- python - 如何使用 Rest Framework 的默认令牌认证视图?
- python - SSL 错误(从 Python 2.7.15 到 Python 3.7.7 的端口)- HTTP 错误 401:消息验证失败
- react-native - 为什么在 build.gradle 上启用 hermes 时这个 bundleReleaseJsAndAssets 会失败?
- python - 如何将 .py 文件中的变量导入列表,以便可以使用该列表中的随机模块?
- pandas - Pandas:即使缺少值也能绘制时间序列
- jdbc - 如何在 Wildfly 20 下修复 sajdbc4 的“无效 ODBC 句柄”?
- javascript - React Hooks 是否比 Class Components 使用更多内存?
- ios - 包含堆栈视图(和/或内容视图)的滚动视图无法按预期工作
- php - 如何使用 PHP 接收和存储 CURL 用户名
- kubernetes-cronjob - 在修补其对象之一时升级 helm chart