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

454
Vistas
react-router v6: obtenga el patrón de ruta para la ruta actual

¿Es posible obtener el patrón de ruta para la ruta actualmente coincidente? Ejemplo:

 <Route path=":state/:city*" element={ <Page /> } />
 // Page.jsx function Page() { ... // usePathPattern doesn't actually exist const pathPattern = usePathPattern(); // pathPattern = ":state/:city*" ... }

Sé que puedo usar useMatch para verificar si la ubicación actual coincide con un patrón de ruta específico, pero luego el componente debe saber cuál es el patrón de ruta.

over 4 years ago · Santiago Trujillo
10 Respuestas
Responde la pregunta

0

import { useMatch, Route, Routes } from "react-router-dom"; <Routes> <Route path="/" element={<Element1 match={useMatch("/")} />} > <Route path=":id" element={<Element2 match={useMatch("/:id")} />} /> </Route> </Routes>
over 4 years ago · Santiago Trujillo Denunciar

0

Desde dentro del contexto de una Route , puede obtener la path a través de varios métodos establecidos en los documentos .

Mi problema fue ligeramente diferente en el sentido de que necesitaba la path fuera del contexto de la Route y llegué a la siguiente solución que también debería funcionar para usted:

 import { matchPath, useLocation } from "react-router-dom"; const routes = [ ':state/:city', ...otherRoutes ]; function usePathPattern() { const { pathname } = useLocation(); return matchPath( pathname, routes )?.path; }
over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar el enlace useLocation https://reactrouter.com/web/api/Hooks/uselocation .

En su caso, veo que está usando parámetros, por lo que useParams hook le dará acceso al patrón de ruta https://reactrouter.com/web/api/Hooks/useparams .

además

 window.location.pathname

te dará la url actual

over 4 years ago · Santiago Trujillo Denunciar

0

Hice un enlace personalizado useCurrentPath con react-router v6 para obtener la ruta de ruta actual, y funcionó para mí

Si la ruta actual es /members/5566 , obtendré la ruta /members/:id

 import { matchRoutes, useLocation } from "react-router-dom" const routes = [{ path: "/members/:id" }] const useCurrentPath = () => { const location = useLocation() const [{ route }] = matchRoutes(routes, location) return route.path }
 function MemberPage() { const currentPath = useCurrentPath() // `/members/5566` -> `/members/:id` return <></> }

Referencia

https://reactrouter.com/docs/en/v6/api#matchroutes

over 4 years ago · Santiago Trujillo Denunciar

0

No es una respuesta directa a la pregunta, pero aquellos que encontraron esta pregunta mientras intentaban obtener los params del objeto de match , ahora pueden hacerlo con el gancho useParams .

 import { Route, Routes } from 'react-router-dom'; import { useParams } from 'react-router'; <Routes> <Route path="/:id" element={<MyComponent />} /> </Routes> ... function MyComponent() { const { id } = useParams(); return <div>{id}</div> }

Espero que sea útil.

over 4 years ago · Santiago Trujillo Denunciar

0

No estoy seguro de si resuelve su caso de uso por completo, pero en mi caso usé una combinación de useLocation y useParams . Aquí está el código:

 import React from 'react'; import { useLocation, useParams } from 'react-router-dom'; import type { Location, Params } from 'react-router-dom'; /** * Function converts path like /user/123 to /user/:id */ const getRoutePath = (location: Location, params: Params): string => { const { pathname } = location; if (!Object.keys(params).length) { return pathname; // we don't need to replace anything } let path = pathname; Object.entries(params).forEach(([paramName, paramValue]) => { if (paramValue) { path = path.replace(paramValue, `:${paramName}`); } }); return path; }; export const Foo = (): JSX.Element => { const location = useLocation(); const params = useParams(); const path = getRoutePath(location, params); (...) };
over 4 years ago · Santiago Trujillo Denunciar

0

Escribí un enlace personalizado para ese propósito, ya que no parece ser compatible con oob en este momento:

Nota: aún no se ha probado a fondo. Así que úsalo con precaución.

 import { useLocation, useParams } from 'react-router'; export function useRoutePathPattern() { const routeParams = useParams(); const location = useLocation(); let routePathPattern = location.pathname; Object.keys(routeParams) .filter((paramKey) => paramKey !== '*') .forEach((paramKey) => { const paramValue = routeParams[paramKey]; const regexMiddle = new RegExp(`\/${paramValue}\/`, 'g'); const regexEnd = new RegExp(`\/${paramValue}$`, 'g'); routePathPattern = routePathPattern.replaceAll( regexMiddle, `/:${paramKey}/`, ); routePathPattern = routePathPattern.replaceAll(regexEnd, `/:${paramKey}`); }); return routePathPattern; }
over 4 years ago · Santiago Trujillo Denunciar

0

Esto parece funcionar con lo que realmente exportan a partir de 6.2.1, sin embargo, utiliza un componente que exportan como UNSAFE_

 import { UNSAFE_RouteContext } from 'react-router-dom'; const reconstructPath = (matches) => matches .map(({ route: { path } }) => path.endsWith('/*') ? path.slice(0, -1) : path ? path + '/' : '' ) .join(''); const findLastNode = (node) => node.outlet ? findLastNode(node.outlet.props.value) : node; const usePathPattern = () => reconstructPath( findLastNode(React.useContext(UNSAFE_RouteContext)).matches );
over 4 years ago · Santiago Trujillo Denunciar

0

No puedes en este momento. Aquí está el trabajo:

 <Route path="/:state" element={<LocationView />} /> <Route path="/:state/:city*" element={<LocationView city />} />

Supongo que está tratando de representar el mismo componente en varias rutas. En lugar de verificar el patrón de la ruta, puede agregar una propiedad booleana al componente (en este caso, city ) y verificar si la propiedad es verdadera.

over 4 years ago · Santiago Trujillo Denunciar

0

esto me funciona facilmente

en primer lugar, importe la ubicación de uso desde react-router-dom

 import { useLocation } from "react-router-dom"

luego

 const location = useLocation(); console.log(location.pathname);
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