#reactjs
#reactjs
Вопрос:
вероятно, это какая-то глупая ошибка, но я не могу выяснить, что происходит.. Вот мой пример состояния:
this.state = {
data: {
some data: ['some data']
}
}
Теперь я пытаюсь удалить определенный индекс из массива. Вот мой подход:
const newArr = this.state.data[key].filter(item => item !== value);
В приведенном выше коде я получаю то, что хочу, то есть массив без одного конкретного элемента
data: {
...this.state.data,
[key]: newArr
},
Но это не работает.. Что здесь не так?
Комментарии:
1. Что именно «не работает»? Какой результат вы ожидаете и какой результат вы получаете?
2. Ожидаемым результатом будет массив без одного элемента, который функция filter выбросила. Вместо этого по какой-то причине значения в моем массиве дублируются. Я запускаю функцию по щелчку, чтобы установить состояние, и после нескольких щелчков массив растет.
Ответ №1:
В вашем коде вы добавляете отфильтрованный массив к элементам в исходном массиве. Это ваше намерение?
data: {
...this.state.data,
[key]: [
...this.state.data[key], // individual entries
newArr, // array
],
},
//result:
data: {
'some key': [
"item 1", // string from original
"item 2", // string from original
[ "item 1", "item 2"] // array
]
}
Если вам просто нужны отфильтрованные элементы:
data: {
...this.state.data,
[key]: newArr // the filtered array
},
//result:
data: {
'some key': [
"item 2", // filtered items
]
}
Комментарии:
1. хм, хороший улов. Я хочу переопределить некоторый ключевой массив, не добавляя новый.. итак, это должно выглядеть так?
data: { ...this.state.data, [key]: newArr },
2. на самом деле мой плохой.. У меня это уже было. Я просто вставил неправильный фрагмент кода. К сожалению, это не работает :/ Я обновил основной пост.
Ответ №2:
Хорошо, это была моя ошибка. Сам код был правильным. Состояние было настроено дважды из-за моей ошибки.