Ответы пользователя по тегу React
  • Объясните как работает данный код в React?

    meowto16
    @meowto16
    Делаю штуки
    Это обычный нативный метод для массивов. К React'у он прямого отношения не имеет.

    Смотри по строкам:
    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, который хотим удалить - оставляем элемент в массиве, иначе убираем
        })
      );


    Чтобы было более ясно вот более простой пример, без state в 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 }]

    }
    Ответ написан
    Комментировать
  • Зачем используется колбек при вызове функции изменения состояния из useState?

    meowto16
    @meowto16
    Делаю штуки
    В твоем примере от него нет смысла.
    А так он обычно используется, чтобы задать стейт на основании предыдущего значения стейта
    function handler(newValue) {
      setValue((prevState) => prevState + 1) // Установит стейт на основании предыдущего значения + 1
    }
    Ответ написан
    1 комментарий