Не может изменить значения множественного выбора с помощью муравья - PullRequest
0 голосов
/ 21 мая 2019

У меня есть мультиселект, разработанный с ant Design , значения которого извлекаются из бэкэнда:

 "jours": [
        {
            "id": 1,
            "jour": "Lundi"
        },
        {
            "id": 2,
            "jour": "Mardi"
        },
        {
            "id": 3,
            "jour": "Mercredi"
        },
        {
            "id": 4,
            "jour": "Jeudi"
        },
        {
            "id": 5,
            "jour": "Vendredi"
        },
        {
            "id": 6,
            "jour": "Samedi"
        }
    ]

Мой код:

    jour:[], jours:[], joursId:[], 
handleJourChange = (jour) => { 
    this.state.jours.map((jourId)=>{
      this.state.joursId.push(""+jourId.id+"");
      this.setState({
        joursId: this.state.joursId
      })
      console.log(this.state.joursId)
      if (jour.includes('all')) {
        this.setState({ jour: this.state.joursId });
      } 
      else {
        this.setState({jour :jour});
      }
    })
  }

<Select id="motif" name= "motif" mode="multiple" showArrow allowClear showSearch style={{ width: '535px' }} placeholder="Sélectionnez le(s) motif(s)" value={this.state.jour} onChange={this.handleJourChange} 
                                optionFilterProp="children" filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}>
                          <Option value="all">Sélectionner tout</Option>
                          { this.state.id_user > 0 && this.state.jours.map((jour)=>
                            <Option key={jour.id} value={jour.id}>{jour.jour}</Option>
                          )}
                        </Select>

Мой кодSandbox: https://codesandbox.io/s/async-meadow-2clz5

Когда я его запускаю:

  • Опция выбора - это идентификатор, а не значения данных.

  • Когда я нажимаю на выбрать все, все значения будут выбраны, и я очищаю его, он будет очищен, но когда я снова выберу все, он будет выбран все несколько раз, что я не могу очистить его.

Как это исправить?

1 Ответ

1 голос
/ 21 мая 2019

Это можно реализовать, изменив функциональность handleChange на:

handleJourChange = jour => {
  if (jour.includes("all")) {
    this.setState(prevState => ({
      jour: prevState.jours.map(item => item.id)
    }));
  } else {
    this.setState({
      jour
    });
  }
};

В вашем коде и в ящике есть дополнительный код, включающий joursId, в котором я не уверен.
Полный CodeSandbox

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