如果页面上有很多,则如何更改1选择1的值。我在表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>
);
}
}
您需要每个选择的单独状态。您可以使用select
,
name
属性 <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>
...
)
}
从我从您的演示中看到的东西,您只有在州的财产。如果您要更改第一个选择的值,它将更新状态,这会导致您的第二个选择具有相同的值。
对于每个选择字段,您应该在州中具有不同的属性。
您需要独立保存每个选择值。您可以为此使用名称标签:
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 }
],
1: "10",
2: "10",
};
handleSelect = (e, key, type) => {
this.setState({
[e.target.name]: e.target.value
});
};
render() {
return (
<div>
<FormControl>
<Select
name={1}
value={this.state[1]}
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[2]}
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>
);
}
}
这将独立保存在状态中的每个选择值,并将更新Select上的正确值。您也不应该为菜单的密钥使用索引。