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

346
Vistas
Reaccionar errores de tiempo de ejecución: ¿qué sucede si no se proporciona un accesorio esperado? ErrorBoundary y PropTypes

Tengo un Profile de componente que podría recibir este apoyo:

 RootProfile.propTypes = { route: PropTypes.shape({ params: PropTypes.shape({ userData: PropTypes.oneOfType([ PropTypes.shape({ id: PropTypes.string.isRequired, }), PropTypes.shape({ username: PropTypes.string.isRequired, }), ]), }), }).isRequired, };

En el código de Profile , hago:

 function RootProfile({route: { params }}){ const currentUser = useCurrentUser(); let { userData = currentUser.data } = params ?? {}; // Consume the most up-to-date data from context userData = useUpdatedUserData(userData); if (userData.id) { return <Profile userData={userData} /> } // We will need to fetch the user by username! return <ProfileFetcher username={userData.username} /> }

Como puede ver, si userData.id no está definido, no renderizo mi componente de Profile de carga diferida... En su lugar, renderizo mi componente ProfileFetcher , que solo obtiene los datos del usuario por nombre de usuario y los almacena en mi contexto (que Consumo en RootProfile para volver a renderizar la pantalla cuando todo esté listo).

Mi pregunta es: ¿qué pasa si, por una razón inesperada, el Profile no recibe los campos de apoyo "requeridos" para su trabajo? Quiero decir, ¿qué pasa si no recibe ni userData.id ni userData.username?

¿Debería hacer algo como

 function RootProfile({route: { params }}){ const currentUser = useCurrentUser(); let { userData = currentUser.data } = params ?? {}; // Consume the most up-to-date data from context userData = useUpdatedUserData(userData); if (userData.id) { return <Profile userData={userData} /> } else if (userData.username) { // We will need to fetch the user by username! return <ProfileFetcher username={userData.username} /> } else { throw new Error("id or username is required"); } }

?? Quiero decir, ¿se considera "correcto" arrojar un error dentro de un componente React?

O, ¿deberían manejarse todas estas situaciones con ErrorBoundaries y PropTypes ?

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

0

Si cree que la propiedad puede no estar definida, considere eliminar isRequired y convertirla en opcional. Sin embargo, en respuesta a su pregunta, la biblioteca PropTypes no arroja errores en el modo de producción, por lo que no puede detectarlo con un ErrorBoundary , debe verificarlo en el menú.

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