Удалить элемент из состояния

#reactjs

#reactjs

Вопрос:

Я знаю, что этот вопрос задавали много раз, но, похоже, я не нашел решения, даже если пробовал разные сценарии.

 this.state = {
      chartTypes: [{name: 'Bar', id: 1},{name: 'Line', id: 2},{name: 'Pie', id: 3},{name: 'Radar', id: 4} ],
      selectedChart: [],
}

  onSelect = (selectedList, selectedItem) => {
   // selectedItem.name returns name of chartTypes, selectedItem.id returns id of chartTypes.

    this.setState({
      selectedChart: selectedItem.name
    })
  }
  
  onRemove = (selectedList, removedItem) => {
       // removedItem.name returns name of chartTypes, removedItem.id returns id of chartTypes.
  }
  

Опция выбора работает нормально, но я просто поместил ее туда, чтобы вы могли лучше понять. onSelect помещает каждый selectedItem.name в selectedChart . В функции удаления, как я могу удалить элемент из this.state.selectedChart на основе значения / индекса.

Комментарии:

1. что значит удалить state.selectedChart на основе значения? ваша выбранная диаграмма — это объект, а не массив.

2. @AkinoArchilles selectedChart — это массив?

Ответ №1:

Я думаю, вы можете сделать что-то вроде этого

     let temp = this.state.selectedChart;
    temp=temp.filter((item) => item !== removedItem.name);
    this.setState({ selectedChart: temp });
  

Комментарии:

1. Ошибка типа: temp.filter не является функцией

2. если this.state.selectedChart является строкой, и одновременно может быть установлена только одна строка?

Ответ №2:

 var newArray = this.state.selectedChart.filter((el)=> 
  el.id !==removedItem.id
);
  

после фильтрации

 this.setState({selectedChart:newArray})
  

Комментарии:

1. Мне нужно selectedChart не то chartTypes . chartTypes это переменная, которая содержит типы / модели диаграмм.

2. @ClaytonCrockville, как я понимаю, вы хотите получить removedItem из selectedList и поместить его внутрь state.selectedChart ?

3. onSelect добавляет то, что вы выбираете this.state.selectedChart . Предполагается, что onRemove удаляет this.state.selectedChart то, что пользователь нажал, чтобы удалить. easycaptures.com/fs/uploaded/1473/1143598225.png

Ответ №3:

Просто отфильтруйте и установите backed в состояние

 onRemove = (selectedList, removedItem) => {
      let filtered = this.state.chartTypes.filter(list=> list.id !==removedItem.id);
      this.setState({ chartTypes: filtered });
  }
  

Комментарии:

1. Я попытался добавить состояние с помощью `this.setState ({selectedChart: filtered})`, но это не дает правильного результата.

2. @ClaytonCrockville в вашей функции onRemove просто передайте один объект массива… и установить обратно в chartTypes not selectedChart