【问题标题】:How to use antd multiple checkbox in reactjs?如何在 reactjs 中使用 antd 多个复选框?
【发布时间】:2020-08-07 00:27:59
【问题描述】:

我正在使用 antd 复选框。我使用值数组存储检查值,但我需要存储未检查值数组。

    const plainOptions = ["Apple", "Pear", "Orange"];
    const defaultCheckedList = ["Apple", "Orange"];

      state = {
        checkedList: defaultCheckedList
      };

      onChange = checkedList => {
        this.setState({
          checkedList
        });
      };

      onCheckAllChange = e => {
        this.setState({
          checkedList: e.target.checked ? plainOptions : []
        });
      };

      onCheckItem = value => e => {
        this.setState({
          checkedList: this.state.checkedList.includes(value)
            ? this.state.checkedList.filter(x => x !== value)
            : [...this.state.checkedList, value]
        });
      };

 // This is checked All , When user click on this checked box , it will be store array of value.  
              <Checkbox
                indeterminate={
                  checkedList.length < plainOptions.length && checkedList.length > 0
                }
                onChange={this.onCheckAllChange}
                checked={checkedList.length === plainOptions.length}
              >
                Check all
              </Checkbox>

            {plainOptions.map((item, idx) => (
              <Checkbox
                key={item + idx}
                onChange={this.onCheckItem(item)}
                checked={checkedList.includes(item)}
              >
                {item}
              </Checkbox>
            ))}

目前,当我选中复选框时,它会给我一个值数组,例如 ["apple","Orange"],但我想通过使用值数组 ["Pear"] 来保存未选中的值

未选中的预期输出: 未选中:[“梨”]

这是我的代码框:

https://codesandbox.io/s/check-all-ant-design-demo-b3udh?fontsize=14&hidenavigation=1&theme=dark&file=/index.js:0-1613

【问题讨论】:

    标签: javascript arrays reactjs object antd


    【解决方案1】:
    const plainOptions = ["Apple", "Pear", "Orange"];
    const defaultCheckedList = ["Apple", "Orange"];
    
    class App extends React.Component {
      state = {
        checkedList: defaultCheckedList,
        uncheckedList: []
      };
    
      onChange = checkedList => {
        this.setState({
          checkedList
        });
      };
    
      onCheckAllChange = e => {
        this.setState({
          checkedList: e.target.checked ? plainOptions : [],
          uncheckedList: e.target.checked ? [] : plainOptions
        });
      };
    
      onCheckItem = value => e => {
        this.setState(
          {
            checkedList: this.state.checkedList.includes(value)
              ? this.state.checkedList.filter(x => x !== value)
              : [...this.state.checkedList, value]
          },
          () => {
            this.setState({
              uncheckedList: plainOptions.filter(
                o => !this.state.checkedList.includes(o)
              )
            });
          }
        );
      };
    
      render() {
        const { checkedList, uncheckedList } = this.state;
        console.log(uncheckedList);
        return (
          <div>
            <div className="site-checkbox-all-wrapper">
              <Checkbox
                indeterminate={
                  checkedList.length < plainOptions.length && checkedList.length > 0
                }
                onChange={this.onCheckAllChange}
                checked={checkedList.length === plainOptions.length}
              >
                Check all
              </Checkbox>
            </div>
            <br />
            {plainOptions.map((item, idx) => (
              <Checkbox
                key={item + idx}
                onChange={this.onCheckItem(item)}
                checked={checkedList.includes(item)}
              >
                {item}
              </Checkbox>
            ))}
          </div>
        );
      }
    }
    

    【讨论】:

    • 有一些错误,当我检查单个复选框时,但检查了所有都正常
    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2019-02-13
    • 2019-05-05
    • 2019-10-13
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多