React js: элементы, возвращаемые картой, не отображаются

#reactjs

Вопрос:

Сначала я извлекаю данные, затем создаю li элементы путем сопоставления arrdata , но li элементы внутри ul не видны, когда я возвращаю ul App.js

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

     function App() {
          const [isLoaded,setloaded] = useState(false);
           var arrdata = []; //arrdata
           var movielist;
          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({     //filling arrdata
           title:data[key].title,
           id:key,
           price:data[key].price
            })
         }
        return arrdata;
    })
   

    .then((arrdata)=>{
      movielist =  arrdata.map((movie)=>{
      return <li>{movie.title}</li> //elements to be rendered
     })
     setloaded(true);
     console.log(movielist)
    })
   
},[])


  if(isLoaded){
   return <> <ul>
    {movielist} // returning the li elements
   </ul>
   </>
  }
  else{
   return <> <div>...loading</div></>
      }
    }

 export default App;
 

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

1. сохраняйте весь свой ответ в состоянии и не нужно добавлять 2 цикла

Ответ №1:

вы должны определить переменную movielist как состояние, чтобы компонент повторно отображался при изменении фильмов.

 const [movielist, setMovielist] = useState([]); 

и назначьте его с помощью функции setMovielist

 setMovielist(
  arrdata.map((movie) => {
    return <li > {movie.title}< /li>;
  })
);