У вас есть две проблемы здесь.
array.splice
мутирует и возвращает удаленные элементы. Когда вы запускаете
setList([...list.splice(index, 1)]);
Это удаляет один элемент из объекта list
и затем вызывает setList([removed_item])
.
Вы можете заменить эту строку на
setList(list.slice(0, index).concat(list.slice(index + 1))
В настоящее время происходит то, что вы устанавливаете состояние как тот же объект, что и раньше (но мутировал), поэтому он не запускает повторную визуализацию.
Вы неправильно используете атрибуты
key
. Вы можете прочитать документы
здесь Мы не рекомендуем использовать индексы для ключей, если порядок элементов может измениться. Это может негативно повлиять на производительность и может вызвать проблемы с состоянием компонента.
Ваши ключи должны однозначно идентифицировать элементы списка задач, без ссылки на сам список. Текст в пункте является хорошим выбором, за исключением возможной проблемы неуникальности.
При повторном рендеринге списка задач React использует ключи, чтобы решить, какие дочерние элементы следует рендерить. Если вы используете индексы в качестве ключей, а затем удаляете элемент с индексом 0, то 0-му дочернему элементу не будет приказано перейти на новый 0-й элемент, поскольку он все еще получает тот же ключ.