显示即将到来的 Select 选项与先前 Selected Select 字段的逻辑
Showing Upcoming Select Options with logic to Previous Selected Select Field
我正在从 api 接收数据,就像嵌套到状态对象中的引用一样
示例:
const data = [
{
id: 1,
name: 'State One',
cities: [
{
id: 1,
state: 'State One',
name: 'City One'
},
{
id: 2,
state: 'State One',
name: 'City Two'
},
{
id: 3,
state: 'State One',
name: 'City Three'
}
]
},
{
id: 2,
name: 'State 2',
cities: [
{
id: 4,
state: 'State 2',
name: 'City 5'
}
]
}
]
我必须根据父州给出城市的 Select 选项。假设用户在州 Select 字段中选择了 State One
,那么下一个城市字段中应该只有 State One
的城市选项
如何配置?
目前;我已经创建了 Select 输入字段的空心结构,但找不到任何内容,我该如何配置它。我需要很少的帮助或任何想法来开始。
这是当前代码;
<Col lg="6" md="12" className="mb-1">
<Label className="form-label py-1" for="state">
State
</Label>{' '}
<Row></Row>
<Select
id="state"
options={stateOptions}
defaultValue={stateOptions[0]}
onChange={(choice) => console.log(choice.value)}
/>
</Col>
<Col lg="6" md="12" className="mb-1">
<Label className="form-label py-1" for="city">
City
</Label>{' '}
<Row></Row>
<Select
id="city"
classNamePrefix="select"
options={cityOptions}
onChange={(choice) => console.log(choice.value)}
/>
</Col>
我看过一些文章,但他们建议使用 npm 库,但我不能使用它们,因为数据与我想要处理的数据有很大不同。
您可以跟踪当前选择的州并更新第二个 Select 所在的城市。
还添加了一些注释来解释函数的作用。
export default function App() {
const [state, setState] = useState(null);
const [city, setCity] = useState(null);
const onStateChange = (option) => {
setState(option);
// to remove city if a different state is selected
if (!option || option?.value !== state?.value) setCity(null);
};
const onCityChange = (option) => {
setCity(option);
};
// a separate useState for cities is not needed
// as cities depend on the selected state, it can be determined when state changes
const cities = useMemo(() => {
if (!state) return [];
return getOptions(data.find((el) => el.id === state.value).cities);
}, [state]);
return (
<div>
<Select options={states} value={state} onChange={onStateChange} />
<hr />
<Select options={cities} value={city} onChange={onCityChange} />
</div>
);
}
我正在从 api 接收数据,就像嵌套到状态对象中的引用一样
示例:
const data = [
{
id: 1,
name: 'State One',
cities: [
{
id: 1,
state: 'State One',
name: 'City One'
},
{
id: 2,
state: 'State One',
name: 'City Two'
},
{
id: 3,
state: 'State One',
name: 'City Three'
}
]
},
{
id: 2,
name: 'State 2',
cities: [
{
id: 4,
state: 'State 2',
name: 'City 5'
}
]
}
]
我必须根据父州给出城市的 Select 选项。假设用户在州 Select 字段中选择了 State One
,那么下一个城市字段中应该只有 State One
的城市选项
如何配置?
目前;我已经创建了 Select 输入字段的空心结构,但找不到任何内容,我该如何配置它。我需要很少的帮助或任何想法来开始。
这是当前代码;
<Col lg="6" md="12" className="mb-1">
<Label className="form-label py-1" for="state">
State
</Label>{' '}
<Row></Row>
<Select
id="state"
options={stateOptions}
defaultValue={stateOptions[0]}
onChange={(choice) => console.log(choice.value)}
/>
</Col>
<Col lg="6" md="12" className="mb-1">
<Label className="form-label py-1" for="city">
City
</Label>{' '}
<Row></Row>
<Select
id="city"
classNamePrefix="select"
options={cityOptions}
onChange={(choice) => console.log(choice.value)}
/>
</Col>
我看过一些文章,但他们建议使用 npm 库,但我不能使用它们,因为数据与我想要处理的数据有很大不同。
您可以跟踪当前选择的州并更新第二个 Select 所在的城市。
还添加了一些注释来解释函数的作用。
export default function App() {
const [state, setState] = useState(null);
const [city, setCity] = useState(null);
const onStateChange = (option) => {
setState(option);
// to remove city if a different state is selected
if (!option || option?.value !== state?.value) setCity(null);
};
const onCityChange = (option) => {
setCity(option);
};
// a separate useState for cities is not needed
// as cities depend on the selected state, it can be determined when state changes
const cities = useMemo(() => {
if (!state) return [];
return getOptions(data.find((el) => el.id === state.value).cities);
}, [state]);
return (
<div>
<Select options={states} value={state} onChange={onStateChange} />
<hr />
<Select options={cities} value={city} onChange={onCityChange} />
</div>
);
}