【问题标题】:MUI: Keep track of multiple Checkbox statesMUI:跟踪多个复选框状态
【发布时间】:2021-10-20 04:34:36
【问题描述】:

我在使用 MUI 的选项卡中有一个复选框元素。切换选项卡时,它会删除复选框视觉效果。

{listItem.map((checkbox, index) => {
          return (
            <FormControlLabel className="twocolelement"
        control={
          <Checkbox
          key={(index) + (checkbox.Name)}
            name={checkbox.Name}
            value={checkbox.Weight}
            id={checkbox.Category}
            checked={isChecked==index}
            color="primary"
            onChange={event => handleCheckboxChange(index, event)}
            onClick={() => isCheckboxChecked(index)}
          />
        }
        label={(checkbox.Brand) + ' ' + (checkbox.Name)}
      />

          );
        })}
  const [isChecked, setIsChecked] = React.useState([]);

  const isCheckboxChecked = (index) => {
    setIsChecked(index)
    console.log(index)
}

这会保持状态,但它就像一个单选按钮(只允许一个选择)

在选项卡之间移动时如何保持复选框状态(选中)?

【问题讨论】:

    标签: reactjs material-ui


    【解决方案1】:

    如果要存储Checkboxs 的所有状态:

    const [isChecked, setIsChecked] = React.useState(() =>
      listItem.map((i) => false)
    );
    
    const isCheckboxChecked = (index, checked) => {
      setIsChecked((isChecked) => {
        return isChecked.map((c, i) => {
          if (i === index) return checked;
          return c;
        });
      });
    };
    console.log(isChecked);
    
    return (
      <div>
        {listItem.map((checkbox, index) => {
          return (
            <FormControlLabel
              key={index + checkbox.name}
              className="twocolelement"
              control={
                <Checkbox
                  name={checkbox.name}
                  value={checkbox.weight}
                  id={checkbox.category}
                  checked={isChecked[index]}
                  color="primary"
                  onChange={(e) => isCheckboxChecked(index, e.target.checked)}
                />
              }
              label={checkbox.name}
            />
          );
        })}
      </div>
    );
    

    【讨论】:

    • 谢谢 - isChecked 上的数组对我来说返回空......有什么建议吗?
    • @PaulVI isChecked 在我的代码中从不为空,因为我使用默认数组值对其进行了初始化,您能否分叉我的代码框并重现错误,以便我查看问题所在?
    • 我相信这与listItem的阅读有关。我从 firebase 读到了这个,所以 const listItem = useItems();然后 useItems() 是 firebase onsnapshot 读取。
    • 这与您问题中的代码不同,因此除非您制作可重现的代码框,否则我无法猜测出什么问题。 @PaulVI
    • 这可能有点困难——复选框位于 Material UI 选项卡中——然后它们就会消失。也尽我所能 isChecked 总是空的...
    猜你喜欢
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    相关资源
    最近更新 更多