Untitled

 avatar
unknown
javascript
2 years ago
1.6 kB
10
Indexable
import { useState, useEffect } from 'react';

import styles from './AvailableMeals.module.css';
import Card from '../UI/Card';
import MealItem from "./MealItem/MealItem";

const AvailableMeals = () => {
    const [meals, setMeals] = useState([]);

    // function passed  to useEffect should not return promise, it should return the cleanup function
    // thats why the nested fetchMeals function is needed
    useEffect(() => {
        const fetchMeals = async () => {
            const response = await fetch('https://react-http-9c568-default-rtdb.europe-west1.firebasedatabase.app/meals.json');
            const responseData  = await response.json();

            const fetchedMeals = [];

            for(const item in responseData) {
                fetchedMeals.push({
                    id: item,
                    name: responseData[item].name,
                    description: responseData[item].description,
                    price: responseData[item].price
                });
            }

            setMeals(fetchedMeals);
            console.log(meals);
        }

        fetchMeals();
    }, []);

    // transform array to array of JSX elements
    const mealsList = meals.map(meal =>
        <MealItem
            id={meal.id}
            key={meal.id}
            name={meal.name}
            description={meal.description}
            price={meal.price}
        />
    );

    return <section className={styles.meals}>
        <Card>
            <ul>
                {mealsList}
            </ul>
        </Card>
    </section>
};

export default AvailableMeals;
Editor is loading...