Как отобразить все значение моего массива

Я все еще немного новичок, чтобы реагировать и как это работает. Я пытаюсь создать список покупок из списка рецептов, которые представляют собой объекты, содержащие массив ингредиентов, но реагирующие отображают только 1-й элемент и отображают другие элементы после каждого щелчка.

вот мой код:

import { useState } from 'react';
import { MealContext } from '../../../Context/MealContext';
import GroceryListComponent from './GroceryListComponent';
const GrocerysListContainer = () => {
    const [selectedMeals,setMeals] = useContext(MealContext);
    const [groceryList, setGroceryList]= useState([]);
    const [showList,setShowList] = useState(false);
   
   
    
    const handleClick = ()=>{
        setShowList(true);
        selectedMeals.forEach(meal => {
            meal.ingredient.forEach((dish)=>{
             if (!groceryList.find(({name})=>name === dish.toLowerCase())){
                 setGroceryList([...groceryList, {name : dish.toLowerCase(), qty : 1}]);
                 console.info('add')
             }else{
                console.info('remove')
              return;
                }
            })
             
         });
        
    }
  
    

    
    return (
        <div className = "groceryList">
        <button className = "btn btn-submit" onClick = {()=>handleClick()}>Creer liste de course</button>
        {showList && <ul>
           { groceryList.map((grocery,index)=>{
            return(
                    <GroceryListComponent
                    key = {index}
                    grocery = {grocery}
                />
            )
           })
           } 
        </ul>}
        </div>
    );
};


export default GrocerysListContainer;


Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Скорее всего, productList не обновляется в функции, поэтому это поможет добавить новые элементы в массив, а затем, наконец, добавить их.

Быстрая починка

setGroceryList(list => [...list, {name : dish.toLowerCase(), qty : 1}]);

Чтобы перейти к улучшенному решению, необходимо также обновить количество существующего товара.

const handleClick = () => {
    // can include try catch
    setShowList(true);

    let newList = []
 
    for (const meal of selectedMeals) {
       // include check with ?. and ??
       const ingredient = meal.ingredient;
       // can add another loop here
       const dish = ingredient.find(dish => !groceryList.find(({ name }) => name === dish.toLowerCase()))
      if (!dish) {
        newList.push({ name : dish.toLowerCase(), qty : 1})
      } else {
        // depends on what you want to achieve
        // increase qty or something 
      }
    }

    setGroceryList([ ...groceryList, ...newList ])
        
}

Надеюсь, это поможет вам как-то

Ваше здоровье

Другие вопросы по теме

React не перерисовывает мой компонент при изменении массива?
Как вы вставляете массивы в переменную состояния вложенного массива? - Реагировать
Автоматический перезапуск или режим выключения/включения на моем мобильном устройстве, автоматическое открытие приложения в React native
Каково хорошее значение по умолчанию для условной установки тайм-аута?
Очистить тайм-аут, установленный в событии клика в React
Добавить элемент из Fetch API в массив и отобразить новый массив в React
Реагировать на изменение состояния пользовательского хука, не вызывая повторного рендеринга
У меня есть приложение nodejs и react js, и я получаю сообщение об ошибке SyntaxError: Unexpected token '<', "<!DOCTYPE"... недействителен JSON
Почему полезная нагрузка запроса пуста при использовании useState для установки в React?
В React Hook useEffect отсутствует зависимость при передаче реквизита с помощью React Hook