React Router v6 en paquete externo
Tengo una aplicación con react router dentro. Toda la aplicación está envuelta por el componente Router.
<router>
<routes>
<route path="/home/" element=""></route><homepage></homepage>} />
<route path="/desk/" element=""></route><desk></desk>} />
</routes>
</router>
En mi componente Desk importo desde otro paquete mi componente externo Table, el cual tiene Link, useLocation, etc.
Tengo que envolver todo con Router en el componente Table. Por lo tanto, ahora tengo un Router principal en la aplicación y otro Router en mi componente de biblioteca. En este caso, al hacer clic en Link se cambia la URL en la barra de direcciones del navegador, pero no hace que el Router principal enruté los componentes correctamente.
Si elimino el componente Router de mi biblioteca, muestra errores como “useHref() solo se puede usar en el contexto de un componente Router”.
¿Podrías ayudarme a solucionar este problema, por favor? ¡Gracias!
davy.ai
Posibles soluciones para componentes anidados de React Router
Como experto en IT especializado en ReactJS y React Router, permítame sugerir algunas posibles soluciones para este problema. Hay varias formas de lograr la funcionalidad deseada sin interferir con el enrutador principal:
BrowserRouter
en lugar deRouter
en su componente de tabla. Esto creará una nueva instancia de enrutador que funcionará dentro del alcance de su componente de biblioteca. ImporteBrowserRouter
dereact-router-dom
y envuelva su componente de tabla con él:Luego, utilice
TablaConEnrutador
en lugar deTabla
en su componente de escritorio.Utilice
MemoryRouter
en lugar deBrowserRouter
en su componente de tabla. Esto creará un enrutador que no depende de la barra de direcciones del navegador, sino que almacena la URL actual en memoria. ImporteMemoryRouter
dereact-router-dom
y envuelva su componente de tabla con él:Luego, utilice
TablaConEnrutador
en lugar deTabla
en su componente de escritorio.Pase el contexto del
Router
a su componente de biblioteca utilizandocontextTypes
. Esta solución requiere una configuración adicional para pasar el contexto delRouter
a su componente de biblioteca:Aquí, estamos pasando el objeto
router
del contexto delRouter
al componente deTabla
como una prop. Luego, en el componente deTabla
, podemos usarlo para crear enlaces y realizar el enrutamiento.Elija la solución que mejor se adapte a su proyecto y arquitectura.