React js: не удается получить данные от поставщика

#reactjs

Вопрос:

Внутри элемента App.js I есть Items элемент react , и он возвращает Item.js элемент. Внутри Item.js я пытаюсь получить данные от поставщика, но у меня ничего не получается.

App.js

       import logo from './logo.svg';
      import './App.css';
      import '../src/Items'
      import Item from '../src/Item';
      import {useEffect,useState} from 'react'
      import Items  from '../src/Items';
      import ItemContext from './Context';


   function App() {
     const [isLoaded,setloaded] = useState(false);
     const [movielist,setMovieList] =  useState('');
     var arrdata = [];

    useEffect(()=>{
    fetch ("https://react-http-bcc2a-default-rtdb.firebaseio.com/meals.json")
    .then(data=>data.json())
    .then((data)=>{
      for( const key in data ){
           arrdata.push({
           title:data[key].title,
           id:key,
            price:data[key].price
            })
         }
        return arrdata;
    })
    .then((arrdata)=>{
    setMovieList(arrdata.map((movie)=>{
      return <Item price = {movie.price} title = {movie.title}> </Item>

    })
    )
     setloaded(true);
     console.log(movielist)
    })
   
},[])

     if(isLoaded){
       return <> 
       <ItemContext.Provider value={ {title:'new string',price :'40'}}> // here I am using  the Provider
    <Items> </Items>
      </ItemContext.Provider>
    </>
 


      }
     else{
       return <> <div>...loading</div></>
     }

   }

   export default App;
 

Items.js

      import Item  from '../src/Item';
     import { useReducer,useEffect } from 'react';


     export default function Items(){
         return  <>
         <Item> </Item>     //Item  js
                 </>

        }
 

Вложенные Item.js

импорт ItemContext из ‘./Контекста’;

      export default function Item (props){
      return (
      <ItemContext.Consumer>                  //consumer
        {(ctx)=>{
         <>
         <div>{ctx.price}</div>
         <div>{ctx.title}</div>
         </>
        }}
    </ItemContext.Consumer>

   )
 }
 

Context.js

   import React  from "react";

  const  ItemContext = React.createContext({
   title:'default',
   price:'10'

})
 export default ItemContext;
 

Ответ №1:

Я не понимаю ваш код ,пожалуйста, добавьте более подробную информацию

    function App() {
     // u don't need isLoaded u can know if movielist.length > 0
     const [movielist,setMovieList] =  useState([]);


    useEffect(()=>{
      (async() => {
        const response = await fetch("https://react-http-bcc2a-default-rtdb.firebaseio.com/meals.json")
        const json = await response.json()
    

        const temp = []

        for(let key in json){
           temp.push(json[key])
        }

        setMovieList(temp)

    })()

   
},[])

     if(movielist.length > 0){
       return <> 
       <ItemContext.Provider value={movielist}> // here I am using  the Provider
         <Items> </Items>
      </ItemContext.Provider>
    </>
 


      }
     else{
       return <> <div>...loading</div></>
     }

   }



 

Комментарии:

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