#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