Не работает useState
Всем привет! Несколько дней не могу понять в чем проблема. Пишу ToDo лист, в котором должна быть функция удаления некоторых элементов по нажатию кнопки. Пишу useState, и он не удаляет. Почему то не работает setState. Если вывожу в консоль copy, то показывает что элементы массива удаляются, но если же вывожу сам st, то он вообще не меняется. Вот сам код:
const data = [
{
title: "Finish essay collaboration",
isCompleted: false,
id: 1
},
{
title: "Read next chapter of the book",
isCompleted: false,
id: 2
},
{
title: "Send the finished assignment",
isCompleted: false,
id: 3
},]
const ToDo = ()=>{
const [st, setSt] = useState(data)
const del = (id)=>{
const copy = [...st]
const current = copy.filter(t=> t.id !==id)
setSt(current)
console.log(current)
}
Ответы (1 шт):
Автор решения: Listopad02
→ Ссылка
У вас есть массив data - он не меняется. Также есть состояние st, которое принимает значение data. Соответственно, при фильтрации удаляются элементы из самого состояния, а массив data остается нетронутым. Нужно делать цикл по изменяемому состоянию, а не неизменяемому объекту:
return (
<>
{st.map(d=><ToDoItem key={d.id} da={d} del={del}/>)}
</>
)