【问题标题】:value on autocomplete not changing when state updated状态更新时自动完成的值不会改变
【发布时间】:2022-01-16 17:29:56
【问题描述】:

每次单击交换按钮时,我都无法更改自动完成值。

我有 2 个自动完成的应用程序,从和到。单击交换按钮后,在交换功能中,我将切换状态

状态切换有效,但自动完成输入中的值没有改变。我怎样才能做到这一点?谢谢

下面是代码以及codeSandbox https://codesandbox.io/s/combobox-material-demo-forked-yup8d?file=/demo.js

export default function ComboBox() {
  const [from, setFrom] = useState({});
  const [to, setTo] = useState({});

  const onChangeTo = (e, value) => {
    setTo(value);
  };

  const onChangeFrom = (e, value) => {
    setFrom(value);
  };

  const swap = () => {
    setFrom(to);
    setTo(from);
  };
  return (
    <>
      <Autocomplete
        disablePortal
        id="combo-box-demo"
        options={top100Films}
        value={from.label}
        sx={{ width: 300 }}
        onChange={(e, value) => onChangeFrom(e, value)}
        renderInput={(params) => <TextField {...params} label="Movie" />}
      />
      <Autocomplete
        disablePortal
        id="combo-box-demo"
        options={top100Films}
        value={to.label}
        sx={{ width: 300 }}
        onChange={(e, value) => onChangeTo(e, value)}
        renderInput={(params) => <TextField {...params} label="Movie" />}
      />
      <Button variant="outlined" onClick={() => swap()}>
        SWAP
      </Button>
    </>
  );
} 

【问题讨论】:

    标签: react-hooks material-ui


    【解决方案1】:

    您可以提供有效的、已定义的初始状态,以便输入保持为受控输入。

    const [from, setFrom] = useState({ label: '' });
    const [to, setTo] = useState({ label: '' });
    

    【讨论】:

    • 非常感谢,我完全忘了我需要定义初始状态,你拯救了我的一天,干杯!
    • @Melissa 非常欢迎。不要忘记,您还可以投票支持您在 SO 上找到的有用和/或有用的问题、答案和 cmets。干杯,祝你好运!
    猜你喜欢
    • 2013-04-21
    • 2021-09-27
    • 2020-04-16
    • 2018-12-18
    • 2019-05-14
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    相关资源
    最近更新 更多