Jestem nowy w Next.js i zastanawiam się, jak na przykład przekierować ze strony początkowej ( / ) do / hello-nextjs . Gdy użytkownik załaduje stronę, a następnie określ, czy ścieżka === / przekieruj do / hello-nextjs
W React-Router robimy coś takiego:
<Switch>
<Route path="/hello-nextjs" exact component={HelloNextjs} />
<Redirect to="/hello-nextjs" /> // or <Route path="/" exact render={() => <Redirect to="/hello-nextjs" />} />
</Switch>
Odpowiedzi:
W
next.js
można przekierować po załadowaniu strony za pomocąRouter
np .:Lub z hakami:
źródło
Istnieją trzy podejścia.
1. Przekieruj na zdarzenia lub funkcje:
2. Przekieruj za pomocą haczyków:
3. Przekieruj z linkiem:
na podstawie dokumentów Nextjs
<a>
tag jest niezbędny w łączu do takich rzeczy, jak otwieranie w nowej karcie!Istnieje kilka innych opcji routingu po stronie serwera
asPath
. we wszystkich opisanych podejściach można dodać asPath w celu przekierowania zarówno po stronie klienta, jak i serwera.źródło
Odpowiedź @ Nico rozwiązuje problem podczas korzystania z zajęć.
Jeśli używasz funkcji, nie możesz jej użyć
componentDidMount
. Zamiast tego możesz użyć React HookuseEffect
.W 2019 React wprowadził haki. które są znacznie szybsze i wydajniejsze niż klasy.
źródło
<Switch>
, których używaszReact-router
. Nawet<Switch>
nie zapewnia żadnego kodu stanu 303, 302. Tylko przekierowaniaPółoficjalny przykład
Do
with-cookie-auth
przykładów przekierowanie wgetInitialProps
. Nie jestem pewien, czy jest to prawidłowy wzorzec, czy nie, ale oto kod:Obsługuje zarówno po stronie serwera, jak i klienta.
fetch
Połączenia jest taki, który rzeczywiście dostać token uwierzytelniający, możesz ująć to w osobnej funkcji.Co radziłbym zamiast tego
1. Przekieruj na renderowaniu po stronie serwera (unikaj flashowania podczas SSR)To najczęstszy przypadek. Chcesz przekierować w tym miejscu, aby uniknąć początkowego migania strony przy pierwszym ładowaniu.
2. Przekierowanie w componentDidMount (przydatne, gdy SSR jest wyłączony, np. W trybie statycznym)Jest to awaria renderowania po stronie klienta.
Nie mogłem uniknąć flashowania strony początkowej w trybie statycznym, dodaj ten punkt, ponieważ nie możesz przekierować podczas kompilacji statycznej, ale wydaje się to lepsze niż zwykłe podejścia. Spróbuję edytować, gdy będę robić postępy.
Pełny przykład jest tutaj
Odpowiedni problem, który niestety kończy się odpowiedzią klienta
źródło
redirect-to.ts
_app.tsx
źródło
getInitialProps
. @Afsanefda powinna być zaakceptowaną odpowiedzią. A także używasz next.js, nie musisz reagować na router, aby organizować trasy. Dalej już to domyślnie obsługuje.Router.push
powinna zamiast tego przejść do metod cyklu życia komponentówZaimplementowałem tę funkcję w mojej
Next.JS
aplikacji, definiując stronę główną, która działa po stronie serwera przekierowującego i po stronie klienta. Oto kod strony głównej:źródło