¿Cómo obtener la ruta del subcomponente con react router v6?
Así es como estoy usando el gancho useLocation
y
para el efecto de transición de página.
const App = () => {
<routes>
<route path="/" element=""></route><layout></layout>}>
<route index="" element=""></route><welcome></welcome>}/>
<route path="blog" element=""></route><blog></blog>}/>
<route path="team" element=""></route><team></team>}>
<route index="" element=""></route><teamlist></teamlist>}/>
<route path="sales" element=""></route><teamsales></teamsales>}/>
<route path="marketing" element=""></route><teammarketing></teammarketing>}/>
<route path="about" element=""></route><about></about>}/>
</routes>
}
const Layout = () => {
const { pathname } = useLocation();
return (
<box>
<nav></nav>
<fade key="{pathname?.split('/')[1]}" in="">
<outlet></outlet>
</fade>
</box>
);
};
const Team = () => {
const { pathname } = useLocation();
return (
<box>
<teamcommon></teamcommon>
<fade key="{pathname?.split('/')[2]}" in="">
<outlet></outlet>
</fade>
</box>
);
};
El propósito de useLocation
es crear una nueva key
para <fade></fade>
y de esa manera reiniciar el efecto de transición cada vez que la página cambie.
¿Hay una mejor manera de hacer esto?
Alternativamente, ¿cómo se crea un gancho como useChildRoutePath()
, que devuelve la ruta actual del hijo?
El objetivo es simplificar el código de esta manera:
const Layout = () => {
const path = useChildRoutePath(); //Valores posibles: /, blog, team, about
return (
<box>
<nav></nav>
<fade key="{path}" in="">
<outlet></outlet>
</fade>
</box>
);
};
const Team = () => {
const path = useChildRoutePath(); //Valores posibles: /, sales, marketing
return (
<box>
<teamcommon></teamcommon>
<fade key="{path}" in="">
<outlet></outlet>
</fade>
</box>
);
};
(Box y Fade son componentes de chakra-ui)
davy.ai
Usando
useLocation
y<fade></fade>
para el efecto de transición de páginaEn el código dado, el hook
useLocation
se utiliza para obtener el objeto de ubicación actual. La propiedadpathname
del objeto de ubicación se utiliza para crear una nuevakey
para el componenteFade
. Como resultado, cada vez que la página cambia, se genera una nuevakey
y el componenteFade
se vuelve a renderizar, reiniciando el efecto de transición.Si bien esto funciona, puede que no sea la forma más eficiente de lograr el resultado deseado. Una alternativa puede ser crear un hook personalizado
useChildRoutePath
que devuelva la ruta de la subruta actual. Esto puede simplificar el código en los componentesLayout
yTeam
.Creación del hook
useChildRoutePath
Aquí tienes un ejemplo de implementación del hook
useChildRoutePath
:Este hook primero obtiene el
pathname
actual utilizando el hookuseLocation
. Luego, utiliza el hookuseRouteMatch
para hacer coincidir elpathname
actual con sus rutas de subruta. Si hay una coincidencia, extrae la ruta de la subruta (sin incluir la ruta principal) utilizando el métodoslice
. De lo contrario, devuelve'/'
como valor predeterminado.Uso del hook
useChildRoutePath
Así es como se puede utilizar el hook
useChildRoutePath
en los componentesLayout
yTeam
:En lugar de usar
pathname
para crear una nuevakey
paraFade
, se utiliza el hookuseChildRoutePath
para obtener la ruta de la subruta actual. Este valor se utiliza luego para crear una nuevakey
paraFade
, reiniciando el efecto de transición cada vez que la ruta de la subruta cambia.El uso del hook
useChildRoutePath
puede simplificar el código y hacerlo más eficiente.