Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

165
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!