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

135
Vistas
los elementos de la matriz no devuelven el estado actual

Por ejemplo, agrego 10 componentes.

Cuando hago clic en el botón Mostrar registros en la quinta línea, los primeros 4 componentes aparecen en la consola.

Pero incluso si hago clic en el botón de la quinta línea, quiero que todos los componentes aparezcan en la consola.

 import React, { useState, useEffect } from "react"; import ReactDOM from "react-dom"; import { observer } from "mobx-react-lite"; function App() { const [component, setComponent] = useState([]); useEffect(() => {}); const Test = observer(() => { return ( <div> <p> Test <button onClick={testFunction("myFunction"))}>Show logs</button> </p> </div> ); }); function testFunction(a) { console.log(component); console.log(a) } return ( <div> {component.map((Input, index) => ( <Input key={index} /> ))} <button onClick={() => setComponent([...component, Test])}> Click me </button> </div> ); } const rootElement = document.getElementById("root"); ReactDOM.render(<App />, rootElement);

códigos y caja: https://codesandbox.io/s/react-hooks-useeffect-forked-7q15no

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Parece que Observer está obteniendo una versión anterior del componente, que no es consistente con el componente actualizado. En casos como este, useEffect suele ser una mejor opción, ya que se actualiza instantáneamente en lugar de hacerlo de forma asíncrona. Consulte el siguiente código que está funcionando:

El actualizador simplemente hace que se ejecute el gancho useEffect que registra el valor más reciente del componente. El onClick ahora simplemente actualiza el actualizador.

 import React, { useState, useEffect } from "react"; import ReactDOM from "react-dom"; import { observer } from "mobx-react-lite"; function App() { const [component, setComponent] = useState([]); const [updater, setUpdater] = useState(0); useEffect(() => {console.log(component)}, [updater]); const Test = observer(() => { return ( <div> <p> Test <button onClick={() => setUpdater(updater + 1)}>Show logs</button> </p> </div> ); }); return ( <div> {component.map((Input, index) => ( <Input key={index} /> ))} <button onClick={() => setComponent([...component, Test])}> Click me </button> </div> ); } const rootElement = document.getElementById("root"); ReactDOM.render(<App />, rootElement);
about 4 years ago · Santiago Gelvez 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