Возвращает map() из компонента Firebase React?

#reactjs #firebase #loops #components #arrow-functions

#reactjs #firebase #циклы #Компоненты #стрелка-функции

Вопрос:

Я хочу, чтобы компонент ItemsFromDB повторял содержимое объектов по ссылке «содержимое» в моей базе данных Firebase в реальном времени. Но как я могу заставить этот компонент возвращать нужную map() мне функцию, поскольку она находится внутри функции стрелки моментального снимка?

 function ItemsFromDB () {
 return (
   let ref = firebase.database().ref('content')
   ref.child(name).on('value', function (snapshot) {
    snapshot.map((childSnapshot) => 
    <h2>{childSnapshot.val().name}</h2>
    )
  })
 )
}
  

Спасибо!

Ответ №1:

что — то в этом роде

 function ItemsFromDB () {
  const [names, setNames] = React.useState(null);
  
  React.useEffect(() => {
    const ref = firebase.database().ref('content').child('name');
    const callback = snapshot => (
      setNames(snapshot.map(child => child.val().name))
    );
    ref.on('value', callback);
    
    return () => {
      ref.off('value', callback);
    };
  }, []);
  
  if (!names) return null;
  
  return (
    <React.Fragment>
      {names.map(name => <h2>{name}</h2>)}
    </React.Fragment>
  );
}