Как установить несколько флажков reactjs? - PullRequest
1 голос
/ 08 апреля 2020

Я использую реагировать и. этот код работает отлично, но я хочу заменить <CheckboxGroup/>. Теперь я просто передаю массив plainOptions внутри <CheckboxGroup/> без зацикливания, но сейчас я хочу сделать l oop single <Checkbox>, используя массив plainOptions.

    For example : plainOptions.map(item=><Checkbox  value={item} onChange  
    {this.onChange}/>) ) // My code would be  like this

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

    class App extends React.Component {
      state = {
        checkedList: defaultCheckedList,
        indeterminate: true,
        checkAll: false,
      };

      onChange = checkedList => {
        this.setState({
          checkedList,
          indeterminate: !!checkedList.length && checkedList.length < plainOptions.length,
          checkAll: checkedList.length === plainOptions.length,
        });
      };

      onCheckAllChange = e => {
        this.setState({
          checkedList: e.target.checked ? plainOptions : [],
          indeterminate: false,
          checkAll: e.target.checked,
        });
      };
  <div className="site-checkbox-all-wrapper">
          <Checkbox
            indeterminate={this.state.indeterminate}
            onChange={this.onCheckAllChange}
            checked={this.state.checkAll}
          >
            Check all
          </Checkbox>
        </div>
        <br />

        <CheckboxGroup
          options={plainOptions}
          value={this.state.checkedList}
          onChange={this.onChange}
        />

Я хочу использовать <Checkbox/> вместо CheckboxGroup. Мой код будет выглядеть следующим образом

      For example : plainOptions.map(item=><Checkbox  value={item} onChange 
      {this.onChange}/>) 

Как это можно сделать?

Вот мой кодовый ящик: https://codesandbox.io/s/4k6qi?file= / index. js

1 Ответ

2 голосов
/ 08 апреля 2020

Нет необходимости в нескольких состояниях, оставьте один источник (checkedList) в порядке.

onCheckItem = value => e => {
  const { checkedList } = this.state;
  this.setState({
    checkedList: checkedList.includes(value)
      ? checkedList.filter(x => x !== value)
      : [...checkedList, value]
  });
};
render() {
  const { checkedList } = this.state;
  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>
  );
}

Edit Check all - Ant Design Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...