material UI multi select 的状态未正确更新

state of material UI multi select doesn't update properly

material-ui 中多个 select 的状态无法正常工作。

例如:当我第一次select菜单的每一项时,状态没有改变,是这样的:[]

然后通过 select 将第二项状态更改为:['item'].

这些是我在codesandbox上的代码,请看一下:

https://codesandbox.io/s/material-demo-fovpo?fontsize=14

从我在您的代码中看到的情况来看,您不是在谈论 Material UI 状态,而是您的组件状态。对于您的状态,我可以向您保证一切正常。

您可以通过直接在组件 return 语句之前(不在 handleChange 函数中)执行控制台日志记录 (console.log(personName);) 来检查组件状态。您会看到 - 随着您的选择的每次更改 - 您的组件将以当前状态重新呈现。这也是您在实际渲染中看到的。

为什么它目前不起作用?: 由于您在 handleChange 函数中记录状态,您可能看不到刚刚更改的当前状态,直到您的组件使用新状态重新呈现。

您的状态更新正确。看看这个函数:

  function handleChange(event) {
    setPersonName(event.target.value);
    console.log(personName);
  }

setPersonName 是一个异步函数。所以当你打印 personName 时,它​​可能还没有更新,这就是它打印最后一个 personName 的原因。
如果你想根据值做一些事情,要么使用 event.target.value,要么使用 useEffect:

  useEffect(() => {
    console.log(personName);
    //do something here with personName
  }, [personName]);

你可以参考这个CodeSandbox演示