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

130
Visualizações
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 Respostas
Responde à pergunta

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