根据反应中另一个下拉列表的值创建动态下拉列表行
Create rows of dynamic dropdowns based on value of another dropdown in react
我正在使用 react-select,我想创建 n 行的两个下拉列表,这样一个下拉列表中的选项取决于另一个下拉列表中的值 selected同一行。假设我有以下值:
options = ['A', 'B', 'C', 'D']
sub_options = { 'A' : [1,2,3],
'B' : [4,5,6],
'C' : [7,8,9],
'D' : [10,11,12] }
例如。当我在第一个下拉菜单中 select 选项 A
时,第二个下拉菜单有选项 1,2,3
.
可以有n行。我希望我的问题是可以理解的。谢谢
这是 stackblitz: https://stackblitz.com/edit/react-pnjq1t
constructor() {
super();
this.state = {
options: ["A", "B", "C", "D"],
sub_options: {
A: [1, 2, 3],
B: [4, 5, 6],
C: [7, 8, 9],
D: [10, 11, 12]
},
selectedSubOptions: []
};
}
onOptionChange = e => {
this.setState({
selectedSubOptions: this.state.sub_options[event.target.value]
});
};
render() {
return (
<div>
Options:
<select onChange={this.onOptionChange}>
<option value="">Please select</option>
{this.state.options.map(item => (
<option value={item} key={item}>
{item}
</option>
))}
</select>
<br />
Sub Options:
<select>
<option value="">Please select</option>
{this.state.selectedSubOptions.map(item => (
<option value={item} key={item}>
{item}
</option>
))}
</select>
</div>
);
}
不知道图书馆我会这样说:
import React, { useState } from 'react'
import Select, { OptionsType } from 'react-select'
const options: OptionsType<any> = [
{ value: 'A', label: 'A' },
{ value: 'B', label: 'B' },
{ value: 'C', label: 'C' }
]
const subOptions: { [key: string]: OptionsType<any> } = {
A: [
{ value: '1', label: '1' },
{ value: '2', label: '2' },
{ value: '3', label: '3' }
],
B: [
{ value: '4', label: '4' },
{ value: '5', label: '5' },
{ value: '6', label: '6' }
],
C: [
{ value: '7', label: '7' },
{ value: '8', label: '8' },
{ value: '9', label: '9' }
]
}
const MyComponent = () => {
const [value, setValue] = useState<{ value: string; label: string }>(options[0])
const [subValue, setSubValue] = useState<{ value: string; label: string }>(subOptions[value.value][0])
return (
<div>
<Select
options={options}
value={value}
onChange={(value) => {
setValue(value)
setSubValue(subOptions[value.value][0])
}}
/>
<Select
options={subOptions[value.value]}
value={subValue}
onChange={(value) =>
setSubValue(value)
}
/>
</div>
)
}
我正在使用 react-select,我想创建 n 行的两个下拉列表,这样一个下拉列表中的选项取决于另一个下拉列表中的值 selected同一行。假设我有以下值:
options = ['A', 'B', 'C', 'D']
sub_options = { 'A' : [1,2,3],
'B' : [4,5,6],
'C' : [7,8,9],
'D' : [10,11,12] }
例如。当我在第一个下拉菜单中 select 选项 A
时,第二个下拉菜单有选项 1,2,3
.
可以有n行。我希望我的问题是可以理解的。谢谢
这是 stackblitz: https://stackblitz.com/edit/react-pnjq1t
constructor() {
super();
this.state = {
options: ["A", "B", "C", "D"],
sub_options: {
A: [1, 2, 3],
B: [4, 5, 6],
C: [7, 8, 9],
D: [10, 11, 12]
},
selectedSubOptions: []
};
}
onOptionChange = e => {
this.setState({
selectedSubOptions: this.state.sub_options[event.target.value]
});
};
render() {
return (
<div>
Options:
<select onChange={this.onOptionChange}>
<option value="">Please select</option>
{this.state.options.map(item => (
<option value={item} key={item}>
{item}
</option>
))}
</select>
<br />
Sub Options:
<select>
<option value="">Please select</option>
{this.state.selectedSubOptions.map(item => (
<option value={item} key={item}>
{item}
</option>
))}
</select>
</div>
);
}
不知道图书馆我会这样说:
import React, { useState } from 'react'
import Select, { OptionsType } from 'react-select'
const options: OptionsType<any> = [
{ value: 'A', label: 'A' },
{ value: 'B', label: 'B' },
{ value: 'C', label: 'C' }
]
const subOptions: { [key: string]: OptionsType<any> } = {
A: [
{ value: '1', label: '1' },
{ value: '2', label: '2' },
{ value: '3', label: '3' }
],
B: [
{ value: '4', label: '4' },
{ value: '5', label: '5' },
{ value: '6', label: '6' }
],
C: [
{ value: '7', label: '7' },
{ value: '8', label: '8' },
{ value: '9', label: '9' }
]
}
const MyComponent = () => {
const [value, setValue] = useState<{ value: string; label: string }>(options[0])
const [subValue, setSubValue] = useState<{ value: string; label: string }>(subOptions[value.value][0])
return (
<div>
<Select
options={options}
value={value}
onChange={(value) => {
setValue(value)
setSubValue(subOptions[value.value][0])
}}
/>
<Select
options={subOptions[value.value]}
value={subValue}
onChange={(value) =>
setSubValue(value)
}
/>
</div>
)
}