Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据其他下拉列表中的选定值对更改下拉列表的值作出反应_Javascript_Reactjs_Material Ui - Fatal编程技术网

Javascript 根据其他下拉列表中的选定值对更改下拉列表的值作出反应

Javascript 根据其他下拉列表中的选定值对更改下拉列表的值作出反应,javascript,reactjs,material-ui,Javascript,Reactjs,Material Ui,我有3个react输入字段,将数据填充到useState钩子 <FormControl fullWidth> <InputLabel>Primary Goal</InputLabel> <Select name='goalOne'

我有3个react输入字段,将数据填充到useState钩子

                 <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函数的内容,但我完全理解其中遵循的逻辑。似乎还有很长的路要走:)再次感谢你救了我一天!