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

316
Vistas
¿Cuál es el estado de la trampa 'reprocesamiento de accesorios predeterminados' en React?

Estoy buscando una referencia canónica de cómo se ha tratado esto.

Si tengo un componente que se ve así:

 const MyComponent = ({ value = [] }) => { const [otherValue, setOtherValue] = React.useState([]); React.useEffect(() => { setOtherValue(value); }, [value]); return <div> doesn't matter</div> };

Lo que sucede es:

  1. Cuando el value cambia, se dispara la devolución de llamada useEffect, y esto llama a setState
  2. setState provoca una nueva representación, si el value es nulo, entonces se asigna la matriz predeterminada, y este es un objeto nuevo , y esto a su vez provoca una nueva representación.
  3. Bucle infinito.

La solución puede ser declarar su accesorio predeterminado como una constante, como:

 const DEFAULT_VALUE = []; const MyComponent = ({ value = DEFAULT_VALUE }) => { const [otherValue, setOtherValue] = React.useState([]);

Mis preguntas:

Para cada una de las versiones 16, 17, 18 de React:

  • ¿Es este un problema que se ha resuelto? Si, entonces, ¿qué versión lo resolvió?
  • Si no se ha resuelto, un puntero a la decisión 'no resolverá'.
  • ¿Existe una regla eslint para capturar esto?
  • Cualquier otra cosa que sea generalmente útil para evitar esta trampa.
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede usar una propiedad llamada defaultProps. Con defaultProps, el valor predeterminado de su propiedad se convierte en parte de la definición del componente y ya no se restablece en cada procesamiento, lo que evita el bucle infinito con useEffect. Entonces será algo así:

 const MyComponent = ({ value }) => { const [otherValue, setOtherValue] = React.useState([]); React.useEffect(() => { setOtherValue(value); }, [value]); return <div> doesn't matter</div> }; MyComponent.defaultProps = { value: [] };

Y sí, hay una regla de pelusa para eso, pero la regla es:

Hacer cumplir una definición de accesorios predeterminados para cada accesorio que no sea un accesorio requerido

Así que no es exactamente lo que quieres porque funciona con reglas de tipo prop, pero creo que te ayudará con eso. Si desea ver más detalles sobre esta regla, aquí está el archivo Léame que la describe.

over 4 years ago · Santiago Trujillo Denunciar

0

El bucle infinito no está relacionado con ReactJS , por lo que ninguna versión pudo solucionarlo. el problema vuelve a los valores primitive/reference .

Cuando estás usando esto:

 const MyComponent = ({ value = [] }) => { const [otherValue, setOtherValue] = React.useState([]); React.useEffect(() => { setOtherValue(value); }, [value]);

Incluso para un cambio de accesorios, si el siguiente value es un javascript undefined , cree un nuevo valor [] y asígnelo al value y React.useEffect cree que es nuevo (en realidad, este pensamiento es correcto) e intenta obtener el nuevo accesorio y compararlo con el último y para cualquiera de estas acciones usa value y cada vez es nuevo porque su referencia es nueva.

Pero su solución es asombrosa, para cualquier valor de reference type debemos almacenarlo en caché y luego usarlo para evitar crearlo una y otra vez:

 const DEFAULT_VALUE = []; const MyComponent = ({ value = DEFAULT_VALUE }) => {

ESLint :

Hay algunas reglas de complementos para obligar a los desarrolladores a agregar valores predeterminados en accesorios requeridos o no requeridos, pero ninguno de ellos le sugiere que almacene en caché los valores de tipo de referencia para los accesorios predeterminados.

over 4 years ago · Santiago Trujillo 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