Javascript 根据其他下拉列表中的选定值对更改下拉列表的值作出反应
我有3个react输入字段,将数据填充到useState钩子Javascript 根据其他下拉列表中的选定值对更改下拉列表的值作出反应,javascript,reactjs,material-ui,Javascript,Reactjs,Material Ui,我有3个react输入字段,将数据填充到useState钩子 <FormControl fullWidth> <InputLabel>Primary Goal</InputLabel> <Select name='goalOne'
<FormControl fullWidth>
<InputLabel>Primary Goal</InputLabel>
<Select
name='goalOne'
id='goalOne'
value={current.goalOne}
onChange={onChange}
>
<MenuItem id='goalOne' value={10}>
Retirment
</MenuItem>
<MenuItem id='goalOne' value={20}>
Children Education
</MenuItem>
<MenuItem id='goalOne' value={30}>
Vacation
</MenuItem>
</Select>
</FormControl>
onChange函数如下所示:
const [current, setCurrent] = useState({
goalOne: '10',
goalTwo: '20',
goalThree: '30',
});
const onChange = (e) => {
setCurrent({ ...current, [e.target.name]: e.target.value });
};
如果用户选择goalOne作为retirement,而goalTwo已设置为retirement,则goalTwo应更改为goalOne以前的设置。
我尝试在另一个状态保存以前的值,然后使用useEffect钩子运行一些逻辑,但我的noob代码似乎一团糟
下面是我尝试的一个例子:
const onChangeGoals = (e) => {
let prevValue = current[e.target.name];
setPreviousGoals({ ...previousGoals, [e.target.name]: prevValue });
setCurrent({ ...current, [e.target.name]: e.target.value });
};
const [previousGoals, setPreviousGoals] = useState({
goalOne: 10,
goalTwo: 10,
goalThree: 10,
});
useEffect(() => {
if (current.goalOne === current.goalTwo) {
setCurrent({ goalTwo: previousGoals.goalOne });
} else if (current.goalOne == current.goalThree) {
setCurrent({ goalThree: previousGoals.goalOne });
}
}, [current.goalOne]);
我假设,如果某个值(即退休、休假等)已经存在于任何当前值中,那么它需要与新选择的值交换。这里有一个同样的样品-
const [selectedValues, setSelectedValues] = useState({
goalOne: '10',
goalTwo: '20',
goalThree: '30',
});
const onChangeGoals = (e) => {
const keyChanged = e.target.name;
const keyWhoseValueIsRepeated = Object.keys(selectedValues).find(key => selectedValues[key] === e.target.value);
let newValues = { ...selectedValues, [keyChanged]: e.target.value };
if (keyWhoseValueIsRepeated) {
newValues[keyWhoseValueIsRepeated] = selectedValues[keyChanged];
}
setSelectedValues(newValues);
}
让我知道这是否是您要找的。非常有效。非常感谢你。我将阅读更多关于Object.keys find函数的内容,但我完全理解其中遵循的逻辑。似乎还有很长的路要走:)再次感谢你救了我一天!