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

237
Vistas
¿Cómo hacer una página No encontrada con rutas anidadas dinámicas complejas en React Router 6?

¿Cómo hacer una página No encontrada con rutas anidadas dinámicas complejas en React Router 6?

Por ejemplo, tengo rutas dinámicas para categorías y páginas de productos. Se parece a esto:

 site.com/jeans site.com/jeans/qazXzx123122

Para representar los datos en las páginas de categorías y productos, utilizo el mismo enfoque:

  • Obtener URL de useParams
  • Encuentre categoría y productos con la misma URL en Redux-state
  • Representar datos en una página

CategoríaPágina

 const { products } = useSelector((state: RootState) => state.product); const { categories } = useSelector((state: RootState) => state.category); const { url } = useParams(); const categoryProducts = products.filter((product) => product.category.url === url); const category = categories.find((category) => category.url === url) as Category;

Si voy a la URL incorrecta, por ejemplo, a site.com/jeans111 , la aplicación falla porque no hay una categoría con esa URL y category === undefined . Intenté resolver el problema con useEffect hook y redirect pero no tuve éxito.

Enfoque que no funciona

 useEffect(() => { if (!category.name) { return navigate('/', { replace: true, }); } }, [category, navigate]);

Rutas

 const routes = useRoutes([ { path: PATHS.showcase, element: <ShowcasePage />, children: [ { path: '/', element: isDataLoaded ? <DiscountProductsPage /> : <Loader />, }, { path: ':url', children: [ { index: true, element: isDataLoaded ? <CategoryPage /> : <Loader />, }, { path: ':id', element: isDataLoaded ? <ProductPage /> : <Loader />, }, { path: '*', element: <NotFound /> } ], }, { path: PATHS.wishlist, element: isDataLoaded ? <WishlistPage /> : <Loader /> }, { path: PATHS.cart, element: isDataLoaded ? <CartPage /> : <Loader />, }, { path: `${PATHS.cart}/${PATHS.success}`, element: <CheckoutSuccessPage />, }, ], }, { path: PATHS.admin, element: <AdminPage />, children: [ { path: PATHS.orders, element: <OrdersPage />, }, { path: PATHS.products, element: <ProductsPage />, }, { path: PATHS.settings, element: <SettingsPage />, }, ], }, ]);
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Creo que su enfoque es correcto, pero desea desviarse de la ruta cuando no hay una category para la que representar el contenido.

Ejemplo:

 const navigate = useNavigate(); const { url } = useParams(); ... const category = categories.find((category) => category.url === url) as Category; useEffect(() => { if (!category) { navigate('/', { replace: true }); } }, [category, navigate]);

Aunque puede ser mejor mostrar una pantalla alternativa en lugar de simplemente sacar al usuario de la ruta.

 const navigate = useNavigate(); const { url } = useParams(); ... const category = categories.find((category) => category.url === url) as Category; ... return category ? ( ...JSX... ) : ( <div>No match found.</div> );
about 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