Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

115
Visualizações
Firebase (reactjs) lee de la base de datos demasiadas veces

Estoy leyendo de mi base de datos en tiempo real de firebase cuando mi componente se carga para actualizar un estado con los datos devueltos. Cada vez que se carga el componente, obtiene los datos de la base de datos 8 veces, y esto hace que React dé un error ya que el estado se actualiza demasiadas veces en rápida sucesión.

Intenté usar tanto el oyente onValue como la función get , y ambos hacen lo mismo al cargar la página. Si, en cambio, no los llamo en la carga de la página, y onValue o get ejecutan manualmente o desde la base de datos que se está actualizando, se ejecuta solo una vez como se esperaba.

El componente:

 export default function FoodItem(props) { const [foods, setFoods] = useState() const db = getDatabase() // creating the onValue listener (below) creates the same issue // const mealRef = ref(db, (props.userId + "/" + props.date + "/" + props.meal)) // onValue(mealRef, (snapshot) => { // const data = snapshot.val() // console.log(data) // setFoods(data) // }) useEffect(() => { console.log("getFoods") const dbRef = ref(getDatabase()) get(child(dbRef, (props.userId + "/" + props.date + "/" + props.meal))).then((snapshot) => { if (snapshot.exists()) { console.log(snapshot.val()) // setFoods(data) } else { console.log("No data available") } }).catch((error) => { console.error(error) }) }, []) return ( ... ) }

La salida de la consola del código anterior

Si en lugar de usar useEffect , llamo a get con una función (por ejemplo, con onClick , solo obtiene los datos una vez como se esperaba:

 function getFoods() { console.log("getFoods") const dbRef = ref(getDatabase()) get(child(dbRef, (props.userId + "/" + props.date + "/" + props.meal))).then((snapshot) => { if (snapshot.exists()) { console.log(snapshot.val()) // setFoods(data) } else { console.log("No data available") } }).catch((error) => { console.error(error) }) }

¿Cómo hago para que solo se ejecute una vez cuando se carga el componente?

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda