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

168
Visualizações
Array contents can't be retrieved (React JS)

I am getting the content in an array and I can see the contents of the array on console.log.

However, the length is 0 and the contents cannot be retrieved with a map. Why is this?

enter image description here

const contents = [] as any[]

useEffect(() => {
  for(const key of Object.keys(fruits)) {
    contents[key as any] = {
      ...fruits[key as any],
      ...vegetables[key as any],
    }
  }
}, [fruits, vegetables, contents])


console.log('contents', contents)
console.log('contents length', contents.length)
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

You can try to have contents in the state instead of exposing it as a variable.

contents will be updated accordingly and correctly whenever fruits or vegetables get updated.

const [contents, setContents] = useState([])

useEffect(() => {
  const updatedContents = [...contents]
  for(const key of Object.keys(fruits)) {
    updatedContents[key as any] = {
      ...fruits[key as any],
      ...vegetables[key as any],
    }
  }
  setState(updatedContents)
}, [fruits, vegetables])


console.log('contents', contents)
console.log('contents length', contents.length)
about 4 years ago · Juan Pablo Isaza Relatório

0

useEffect executes after each render.

So the order of operations in your example is:

  1. useEffect scheduled to run after render
  2. Rest of the code is executed (including your console.logs, hence you seeing 0 in the console.log)
  3. useEffect executes, updating contents with the data.

In Chrome's dev tools, javascript arrays/objects are displayed by their reference, evaluated lazily. What this means is that if something is added to the array/object later, and if you expand it later than when it was printed, you'll see the new data.

That answers the why.

As a solution, here's what you can do instead:

const [contents, setContents] = useState([]);

useEffect(() => {
  const newContents = [];
  for(const key of Object.keys(fruits)) {
    newContents.push({
      ...fruits[key as any],
      ...vegetables[key as any],
    });
  setContents(newContents);
  }
}, [fruits, vegetables, contents])

console.log('contents length', contents.length);

You'll see the appropriate console log once the state updates.

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