我想在多项 Select 中设置一些值,但怎么做呢?有谁能帮我吗? 100是所有用户的数组,我希望将一些值设置为下拉列表.提前感谢:))

export default function MultipleSelectBox() {
  const valueSheet = useContext(ContextSheet);

  const [personName, setPersonName] = React.useState([]);

  const handleChange = (event, key) => {
    const itemKey = key.key.slice(2);
    console.log("keyyy", itemKey);
    valueSheet.setUserUid(current => [...current, itemKey]);
    const { target: { value } } = event;
    setPersonName(
      typeof value === 'string' ? value.split(',') : value,
    );
    console.log("getSelectedValue", event.target.value);
  };

  return (
    <div>
      <InputLabel id="demo-simple-select-standard-label">Users List :</InputLabel>
      <FormControl sx={{ m: 1, width: 210 }} size="small">
        <InputLabel id="demo-multiple-checkbox-label">Users</InputLabel>
        <Select
          labelId="demo-multiple-checkbox-label"
          id="demo-multiple-checkbox"
          multiple
          value={personName}
          onChange={handleChange}
          input={<OutlinedInput label="Users" />}
          renderValue={(selected) => {
            console.log("selectedd", selected);
            return selected.map((s) => s.FullName).join(", ");
          }}
          MenuProps={MenuProps}
        >

          {valueSheet.userFullName.map((name) => {
            return (
              <MenuItem key={name.id} value={name}>
                <Checkbox checked={personName.indexOf(name) > -1} />
                <ListItemText primary={name.FullName} />
              </MenuItem>
            );
          })}
        </Select>
      </FormControl>
    </div>
  );
}

推荐答案

我通过添加新的属性isChecked并引入了renderValue的模板,对您的代码示例进行了一些重构:

renderValue={(selected) => {
        console.log("selectedd", selected);
        return selected.map((s, index) => (
          <div key={index}>
            <MenuItem key={"menuItem" + index} value={s.FullName}>
              <Checkbox key={"checkbox" + index} checked={s.isChecked} />
              <ListItemText
                key={"listItemText" + index}
                primary={s.FullName}
              />
            </MenuItem>
          </div>
        ));
      }}

因此,可以使用useState设置选定值:

const [personName, setPersonName] = React.useState([
    { id: 2, FullName: "john", isChecked: true },
    { id: 4, FullName: "havvana", isChecked: true }
]);

最新情况:

应该编辑您 Select 值的逻辑.我的意思是你应该用 Select 或取消 Select select控件中的值.代码将如下所示:

const handleChange = (event, key) => {    
    const fullName = event.target.value.slice(-1).pop()
    console.log("fullName", fullName)

    const selectedPerson = usersList.find(u => u.FullName === fullName)
    console.log("selectedPerson", selectedPerson)
    if (selectedPerson && !personName.some(person=> person.FullName === fullName))
    {
       setPersonName(prevArray => [...prevArray, selectedPerson]) 
    } else {
      const updatedArray = personName.filter( p=> p.FullName !== fullName)
      setPersonName(prevArray => [...updatedArray]) 
    }

    console.log("event.target.value", event.target.value);
    console.log("personName", personName)
};

A complete codesandbox example can be seen here.

Reactjs相关问答推荐

运行 node server.js会导致以下错误:Route.post()需要回调函数,但在Route.&处得到了[对象Undefined] lt;计算>

如何使用next.js以DOM为目标在映射中使用Ref

使用Thattle和Use Effect setTimeout进行搜索有什么不同

如何在MUI X数据网格列中显示IMG?

导致useState中断的中断模式

为什么查询错误在处理后仍出现在控制台中?RTK查询+ React

无法在REACTION TANSTACK查询中传递参数

MUI:在props 主题中找到的值:;错误;是[Object],而不是字符串或数字

拖放 - 将排序保存到数组字段

React 无效的钩子调用:如何避免嵌套钩子?

如何在我的自定义主题中样式化MUI TreeItem组件

臭名昭著的测试未包含在 act(...) 中

react 测试库不测试包含 react 路由 dom V6 的组件

无法在 KeyDown 上调用 useCallback 函数

antd 找不到 comments

如何通过单击多个选项中的特定项目在模态上呈现不同的标题?

如何通过 Material ui select 使下拉菜单下拉

CORS 政策:无访问控制允许来源-AWS 和 Vercel

如何在按钮左下角制作 Material UI 菜单下拉菜单

React中`onScroll`和`onScrollCapture`之间的区别?