【问题标题】:How to select default checkbox as selected in reactjs如何选择在reactjs中选择的默认复选框
【发布时间】:2020-03-20 16:41:43
【问题描述】:

我需要将默认复选框设置为 selected 。例如,我有输出

{permission:{group:["can_view"],"topGroup":["can_update"]}} . 

我发送到数据库,数据库给我发送数据,我想在我去编辑时显示从数据库发送的数据。

我只想根据我的输出选择默认复选框。

这是我的初始状态

    const group = ["group", "top"];
const groupItems = ["Apple", "Pear", "Orange"];
    this.state = {
      permission: {}
    };

  UNSAFE_componentWillMount() {
    this.setDefault(false);
  }

  setDefault = fill => {
    const temp = {};
    group.forEach(x => (temp[x] = fill ? groupItems : []));
    this.setState({ permission: temp });
  };
  checkLength = () => {
    const { permission } = this.state;
    let sum = 0;
    Object.keys(permission).forEach(x => (sum += permission[x].length));
    return sum;
  };


  isTotalIndeterminate = () => {
    const len = this.checkLength();
    return len > 0 && len < groupItems.length * group.length;
  };
  onCheckTotalChange = () => e => {
    this.setDefault(e.target.checked);
  };
  isTotalChecked = () => {
    return this.checkLength() === groupItems.length * group.length;
  };

这些方法适用于每个组,例如这里是我的两个角色 - 一个是组,另一个是 topGroup。

  isIndeterminate = label => {
    const { permission } = this.state;
    return (
      permission[label].length > 0 &&
      permission[label].length < groupItems.length
    );
  };
  onCheckAllChange = label => e => {
    const { permission } = this.state;
    const list = e.target.checked ? groupItems : [];
    this.setState({ permission: { ...permission, [label]: list } });
  };
  isAllChecked = label => {
    const { permission } = this.state;
    return !groupItems.some(x => !permission[label].includes(x));
  };

/** * 这些方法适用于单个项目,例如 can_view、can_delete、can_update */

 isChecked = label => {
    const { permission } = this.state;
    return permission[label];
  };

  onChange = label => e => {
    const { permission } = this.state;
    this.setState({ permission: { ...permission, [label]: e } });
  };

渲染(UI)

 <Checkbox
          indeterminate={this.isTotalIndeterminate()}
          onChange={this.onCheckTotalChange()}
          checked={this.isTotalChecked()}
        >
          Check Total
        </Checkbox>
        {group.map(label => (
          <div key={label}>
            <div className="site-checkbox-all-wrapper">
              <Checkbox
                indeterminate={this.isIndeterminate(label)}
                onChange={this.onCheckAllChange(label)}
                checked={this.isAllChecked(label)}
              >
                Check all
              </Checkbox>
              <CheckboxGroup
                options={groupItems}
                value={this.isChecked(label)}
                onChange={this.onChange(label)}
              />
            </div>
          </div>
        ))}

如何在 reactjs 中选择复选框? 这是codesanbox:https://codesandbox.io/s/stackoverflow-a-60764570-3982562-v1-rsnjt?fontsize=14&hidenavigation=1&theme=dark

【问题讨论】:

  • 哪个是您的默认复选框?
  • 当我点击复选框时,我得到了一些输出 {permission:{group:["can_view"],"topGroup":["can_update"]}} 。我发送这个数据库,但是当我想要查看,我需要显示选中的复选框

标签: javascript arrays reactjs object antd


【解决方案1】:

传递为props,直接设置为state即可。

const group = ["group", "topGroup"];
const groupItems = ["can_view", "can_update", "Orange"];

const App = () => {
  const permission = {
    group: ["can_view"],
    topGroup: ["can_update"]
  };
  return <Content permission={permission} />;
};
class Content extends React.Component {
  ...
  componentDidMount() {
    this.setState({ permission: this.props.permission });
  }

Ps:虽然直接将props 设置为state 可能不是最佳实践,但我认为它现在符合您的需求

【讨论】:

  • 我一直面临的另一个问题是,当我从数据库加载数据时,我收到一个错误,即包含未定义,但静态数据绝对没问题。 isAllChecked = 标签 => { const { 权限 } = this.state;返回 !groupItems.some(x => !permission[label].includes(x)); };
猜你喜欢
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 2016-12-20
相关资源
最近更新 更多