Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

173
Vistas
El contenido de la matriz no se puede recuperar (React JS)

Obtengo el contenido de una matriz y puedo ver el contenido de la matriz en console.log.

Sin embargo, la longitud es 0 y el contenido no se puede recuperar con un mapa. ¿Por qué es esto?

ingrese la descripción de la imagen aquí

 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 Respuestas
Responde la pregunta

0

Puede intentar tener contents en el estado en lugar de exponerlo como una variable.

los contents se actualizarán en consecuencia y correctamente cada vez que se actualicen las fruits o vegetables .

 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 Denunciar

0

useEffect ejecuta después de cada procesamiento.

Así que el orden de las operaciones en tu ejemplo es:

  1. useEffect programado para ejecutarse después de renderizar
  2. El resto del código se ejecuta (incluidos sus console.logs, por lo que ve 0 en console.log)
  3. useEffect se ejecuta, actualizando los contenidos con los datos.

En las herramientas de desarrollo de Chrome, las matrices/objetos de javascript se muestran por su referencia, evaluados de forma perezosa . Lo que esto significa es que si se agrega algo a la matriz/objeto más tarde, y si lo expande más tarde que cuando se imprimió, verá los nuevos datos.

Eso responde al por qué.

Como solución, esto es lo que puede hacer en su lugar:

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

Verá el registro de la consola correspondiente una vez que se actualice el estado.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda