Estoy tratando de obtener datos de Firebase, implementé casi los mismos códigos que mi aplicación nativa de reacción, pero esta vez me enfrento a algunos problemas que no pude resolver.
import {db} from './firebase' const formatMarketData = (data) =>{ let formattedData = []; data.forEach(item=>{ const formattedItem = { ...item } formattedData.push(formattedItem); }); return formattedData; } export const FirebaseService = async (id) => { id=id.replace(/['"]+/g, ""); const historyKey="/coins/0/"+id await db.ref(historyKey) .once('value') .then(snapshot => { const data = snapshot.val(); const formattedResponse= formatMarketData(data); console.log(formattedResponse) return formattedResponse }); };Esta función me ayuda a recuperar datos de mi firebase rtdb. Las funciones de console.log funcionan y escriben como se esperaba, pero cuando intento capturarlo en mi página de noticias, se vuelve indefinido.
import React from 'react' import { useState,useEffect } from 'react' import { FirebaseService } from '../../Services/FirebaseService' const NewList = ({id}) => { const [data,setData] = useState([]) useEffect(()=>{ console.log(id) const fetchMarketData = async () =>{ const marketData = await FirebaseService(id); return setData(marketData); } fetchMarketData(); return () => { } },[]) return ( <div> {data!==undefined?data.map((d)=>{return(<p>{d.id}</p>)}) :<p>no data yet</p>} </div> ) } export default NewListMe falta algo pero no puedo notarlo. Otra vista podría ser útil.
Defina formattedResponse al comienzo de la función y devuélvalo al final. He editado tu función
import {db} from './firebase' const formatMarketData = (data) =>{ let formattedData = []; data.forEach(item=>{ const formattedItem = { ...item } formattedData.push(formattedItem); }); return formattedData; } export const FirebaseService = (id) =>{ let formattedResponse = []; id=id.replace(/['"]+/g, ""); const historyKey="/coins/0/"+id await db.ref(historyKey) .once('value') .then(snapshot => { const data = snapshot.val(); formattedResponse= formatMarketData(data); console.log(formattedResponse) }) return formattedResponse };