I
I
Ily4farmer2021-05-21 23:56:03
React
Ily4farmer, 2021-05-21 23:56:03

Can you explain how this code works in React?

I am writing a todo list on hooks, I need to add an action to remove an element from the array.
On the Internet, I found the following code
[

const deleteItem = (id) => {
    setTodo(
      todo.filter(item => {
        return item.id !== id
      })
      
    );
  }
]
But I didn’t really understand how it works
. Please explain how this code works, especially the moment with the definition of which element you want to remove:return item.id !== id

Answer the question

In order to leave comments, you need to log in

3 answer(s)
M
Maxim Kirshin, 2021-05-22
@meowto16

This is the usual native method for arrays. It has nothing to do with React.
Look at the lines:

const [todo, setTodo] = useState([]) // todo: массив todo'шек. setTodo - сеттер, для изменения переменной todo

const deleteItem = (id) => { // Объявляем функцию deleteItem, которая принимает внутрь id интересующей todo
  setTodo( // Устанавливаем новый state для переменной todo, которую объявили выше
    todo.filter(item => { // Берем текущее состояние переменной todo. 
       // filter как forEach проходится по каждому элементу массива. 
      // Принимает в себя callback вида (item, i, array), где item - текущий элемент (соответствует array[i]), текущий индекс, текущий массив (который обходим)
     // В функции callback'е ты должен вернуть булевое значение (true/false). Если true - элемент остается в массиве, если нет - убирается
      return item.id !== id // Если id элемента не равен id, который хотим удалить - оставляем элемент в массиве, иначе убираем
    })
  );

To be clearer, here is a simpler example, without state in React:
const products = [
  { id: 1, price: 25 },
  { id: 2, price: 50 },
  { id: 3, price: 75 },
  { id: 4, price: 100 },
  { id: 5, price: 125 },
]

// Оставим продукты, которые только с ценой выше или равной 100
const filteredProducts = products.filter(product => product.price >= 100) // [{ id: 4, price: 100 }, { id: 5, price: 125 }]

}

V
VitalyChaikin, 2021-05-22
@VitalyChaikin

The (id) of the item to be deleted is passed to the deleteItem function as a parameter;
Next, we call setTodo( ItemToDelete )
We find the ItemToDelete using todo.filter() by the condition item.id !== id

C
coderisimo, 2021-05-22
@coderisimo

todo.filter(item => {
        return item.id !== id
      })

filter returns an array with only those elements for which the function passed to filter will return true. That is, it goes through all the elements and runs this function for each. In your case, you are removing an element from an array. The function passed to filter compares the id of the array elements with the id to remove. If the element's id matches the id of the element being removed, false (item.id !== id) will be returned, and this element will not be included in the array returned by filter.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question