Soy nuevo en Next.js y me pregunto cómo redirigir desde la página de inicio ( / ) a / hello-nextjs, por ejemplo. Una vez que el usuario carga una página y luego determina si path === / redirect to / hello-nextjs
En react-router hacemos algo como:
<Switch>
<Route path="/hello-nextjs" exact component={HelloNextjs} />
<Redirect to="/hello-nextjs" /> // or <Route path="/" exact render={() => <Redirect to="/hello-nextjs" />} />
</Switch>
Respuestas:
En
next.js
puede redirigir después de cargar la página usandoRouter
ej:O con ganchos:
fuente
Hay tres enfoques.
1. Redireccionar eventos o funciones:
2. Redireccionar con ganchos:
3. Redireccionar con enlace:
según los documentos de Nextjs, la
<a>
etiqueta es necesaria dentro del enlace para cosas como abrir en una nueva pestaña.Hay algunas otras opciones para el enrutamiento del servidor que es
asPath
. En todos los enfoques descritos, puede agregar asPath para redirigir tanto el cliente como el servidor.fuente
La respuesta de @ Nico resuelve el problema cuando estás usando clases.
Si está utilizando una función que no puede usar
componentDidMount
. En su lugar, puede usar React HooksuseEffect
.En 2019 React introdujo ganchos. que son mucho más rápidos y eficientes que las clases.
fuente
<Switch>
que está utilizandoReact-router
. Even<Switch>
no proporciona ningún código de estado 303, 302. Solo redireccionaEjemplo semioficial
Los
with-cookie-auth
ejemplos redirigen engetInitialProps
. No estoy seguro de si es un patrón válido o no, pero aquí está el código:Maneja tanto el lado del servidor como el lado del cliente. La
fetch
llamada es la que realmente obtiene el token de autenticación, es posible que desee encapsular esto en una función separada.Lo que recomendaría en su lugar
1. Redireccionar en el render del lado del servidor (evitar flash durante SSR)Este es el caso más común. Desea redirigir en este punto para evitar que la página inicial parpadee en la primera carga.
2. Redireccionar en componentDidMount (útil cuando SSR está desactivado, por ejemplo, en modo estático)Esta es una alternativa para la representación del lado del cliente.
No pude evitar mostrar la página inicial en modo estático, agregue este punto, porque no puede redirigir durante la compilación estática, pero parece mejor que los enfoques habituales. Intentaré editar a medida que avance.
El ejemplo completo está aquí.
Problema relevante, que lamentablemente termina con una respuesta solo del cliente
fuente
redirect-to.ts
_app.tsx
fuente
getInitialProps
. @Afsanefda debería ser la respuesta aceptada. Y también está utilizando next.js, no necesita un enrutador de reacción para organizar las rutas. Siguiente ya maneja eso por defecto.Router.push
debería entrar en los métodos del ciclo de vida de los componentes en su lugarHe implementado esta funcionalidad en mi
Next.JS
aplicación definiendo una página raíz que redirige al lado del servidor y al lado del cliente. Aquí está el código para la página raíz:fuente