#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>
);
}