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

313
Vistas
Reaccionar: accesorios obsoletos en el componente secundario

Aquí está el enlace CodeSandBox: https://codesandbox.io/s/stale-prop-one-g92sv?file=/src/App.js

Encuentro que los componentes secundarios no mostrarán los valores de contador correctos después de hacer clic en dos botones, aunque el contador en realidad se está incrementando:

 import "./styles.css"; import { useState } from "react"; const MyComponent = ({ value }) => { const [counter] = useState(value); return <span>{counter}</span>; }; export default function App() { const [counter, setCounter] = useState(0); const isVisible = counter !== 1; console.log(counter); return ( <div className="App"> <div> <button onClick={() => setCounter((counter) => counter + 1)}> Click me </button> </div> {isVisible && ( <div> Message 1 is: <MyComponent value={counter} /> </div> )} <div style={isVisible ? { display: "block" } : { display: "none" }}> Message 2 is: <MyComponent value={counter} /> </div> </div> ); }

Intento forzar la representación del componente secundario asignando un contador a su clave:

 export default function App() { const [counter, setCounter] = useState(0); const isVisible = counter !== 1; console.log(counter); return ( <div className="App"> <div> <button onClick={() => setCounter((counter) => counter + 1)}> Click me </button> </div> {isVisible && ( <div> Message 1 is: <MyComponent key = {counter} value={counter} /> </div> )} <div style={isVisible ? { display: "block" } : { display: "none" }}> Message 2 is: <MyComponent key = {counter} value={counter} /> </div> </div> ); }

Funciona, pero sigo sin saber por qué no funciona el anterior, ya que ha cambiado el props.value en MyComponent ... Gracias de antemano.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Con este:

 const MyComponent = ({ value }) => { const [counter] = useState(value); return <span>{counter}</span>; };

Le está diciendo a React que establezca el estado inicial en el primer accesorio de value pasado al componente, en el montaje.

Cuando el componente se vuelve a renderizar, el componente ya se ha montado, por lo que se ignora el valor pasado a useState ; en su lugar, el counter en ese elemento secundario se toma del estado de MyComponent , que es igual al estado inicial en MyComponent , el valor inicial apoyo de value aprobado.

Para lo que está tratando de hacer, solo tiene un valor único en toda la aplicación aquí que desea usar en todas partes, por lo que solo debe tener una llamada useState , en el padre, y luego representar el contador en el hijo desde el prop , que cambiará con el estado padre.

 const MyComponent = ({ value }) => { return <span>{value}</span>; };
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