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

72
Visualizações
How to pass a parameter from useEffect to child component in React?

My useEffect method is:

useEffect(() => {
async function getRoomDetails(){
  const db = getFirestore();
  const querySnapshot = await getDocs(collection(db, "rooms"));
  querySnapshot.forEach((doc)=>{
    console.log('Document');
    console.log(doc.id);
    console.log(doc.data().name);
    var channelNameData = doc.data().name;
  })
}
async function getRoomMessages() {
  const db = getFirestore();

  const roomMessages =
    roomId &&
    query(
      collection(db, "rooms", roomId, "messages"),
      orderBy("timestamp", "asc")
    );
  const querySnapShot = await getDocs(roomMessages);
  querySnapShot.forEach((doc) => {
    console.log(doc.id, "=>", doc.data());
  });
    }
     getRoomDetails();
     getRoomMessages();
   }, []);

and I want to pass channelNameData to ChatInput, as

 <ChatInput
     channelName={channelNameData}
    channelId={roomId}
  />

How do I do this? I also want to avoid Assignments to the 'channelNameData' variable from inside React Hook useEffect will be lost after each render error.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Create a state variable with useState.

Modify that variable inside your useEffect hook.

The variable will then be in scope for the rest of your component and you can pass it as a prop.


Make sure you handle the default state from before the effect hook has run (e.g. with a sane default value or a value that indicates a <Loading /> component should be rendered instead of <ChatInput />)

about 4 years ago · Juan Pablo Isaza Relatório

0

You can utilize the useState hook to create a variable for storing channelNameData.

import { useState } from 'react';

const [channelNameDataState, setChannelNameDataState] = useState(null)

Inside your useEffect, you can have a line that sets channelNameDataState.

setChannelNameDataState(channelNameData)

Then you would pass in this state to the child component

<ChatInput
  channelName={channelNameDataState}
  channelId={roomId}
/>

As for preventing assignments to the channelNameData variable getting lost, you should be able to combine the useState hook with localState to make sure you can persist state.

about 4 years ago · Juan Pablo Isaza Relatório

0

Create state variable and assign value inside the effect,

const [channelNameData, setChannelNameData] = useState([]);   

  useEffect(() => {
    async function getRoomDetails(){
      const db = getFirestore();
      const querySnapshot = await getDocs(collection(db, "rooms"));
      querySnapshot.forEach((doc)=>{
        console.log('Document');
        console.log(doc.id);
        console.log(doc.data().name);
        //var channelNameData = doc.data().name;
        setChannelNameData(doc.data().name)
      })
    }
    async function getRoomMessages() {
      const db = getFirestore();
    
      const roomMessages =
        roomId &&
        query(
          collection(db, "rooms", roomId, "messages"),
          orderBy("timestamp", "asc")
        );
      const querySnapShot = await getDocs(roomMessages);
      querySnapShot.forEach((doc) => {
        console.log(doc.id, "=>", doc.data());
      });
    }
    
    getRoomDetails();
    getRoomMessages();
    }, []);

in jsx,

<ChatInput
  channelName={channelNameDataState}
  channelId={roomId}
/>
about 4 years ago · Juan Pablo Isaza Relatório
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