Mam:
<Route name="app" path="/" handler={App}>
<Route name="dashboards" path="dashboards" handler={Dashboard}>
<Route name="exploreDashboard" path="exploreDashboard" handler={ExploreDashboard} />
<Route name="searchDashboard" path="searchDashboard" handler={SearchDashboard} />
<DefaultRoute handler={DashboardExplain} />
</Route>
<DefaultRoute handler={SearchDashboard} />
</Route>
Podczas korzystania z DefaultRoute SearchDashboard renderuje się nieprawidłowo, ponieważ każdy * Dashboard musi być renderowany w Dashboard.
Chciałbym, aby moja DefaultRoute w „app” Route wskazywała na Route „searchDashboard”. Czy to jest coś, co mogę zrobić z React Router, czy powinienem do tego użyć zwykłego JavaScript (do przekierowania strony)?
Zasadniczo, jeśli użytkownik przejdzie na stronę główną, chcę wysłać go zamiast tego do panelu wyszukiwania. Myślę więc, że szukam funkcji React Router odpowiadającejwindow.location.replace("mygreathostname.com/#/dashboards/searchDashboard");
javascript
routes
reactjs
url-redirection
react-router
Matthew Herbst
źródło
źródło
Odpowiedzi:
Możesz użyć przekierowania zamiast DefaultRoute
<Redirect from="/" to="searchDashboard" />
Zaktualizuj 2019-08-09, aby uniknąć problemu z odświeżaniem, użyj tego zamiast tego, dzięki Ogglas
<Redirect exact from="/" to="searchDashboard" />
źródło
from='/a' to='/a/:id'
, będziesz musiał użyć<Switch>
do dołączenia swojego<Redirect>
i<Route>
komponentu zreak-routera. Szczegóły patrz dokument<Redirect exact from="/" to="/adaptation" />
exact
flaga. Brakuje odpowiedzi acceptet, więc pasuje ona [prawie] do każdej trasy.Problem z używaniem
<Redirect from="/" to="searchDashboard" />
polega na tym, że jeśli masz inny adres URL, powiedzmy,/indexDashboard
a użytkownik odświeży się lub otrzyma wysłany do niego adres URL, użytkownik i tak zostanie przekierowany na/searchDashboard
.Jeśli nie chcesz, aby użytkownicy mogli odświeżyć witrynę lub wysyłać adresy URL, użyj tego:
<Route exact path="/" render={() => ( <Redirect to="/searchDashboard"/> )}/>
Użyj tego, jeśli
searchDashboard
jest za logowaniem:<Route exact path="/" render={() => ( loggedIn ? ( <Redirect to="/searchDashboard"/> ) : ( <Redirect to="/login"/> ) )}/>
źródło
Niepoprawnie próbowałem utworzyć domyślną ścieżkę z:
<IndexRoute component={DefaultComponent} /> <Route path="/default-path" component={DefaultComponent} />
Ale to tworzy dwie różne ścieżki, które renderują ten sam komponent. Nie tylko jest to bezcelowe, ale może powodować usterki w interfejsie użytkownika, np. Podczas stylizacji
<Link/>
elementów na podstawiethis.history.isActive()
.Właściwym sposobem utworzenia trasy domyślnej (która nie jest trasą indeksu) jest użycie
<IndexRedirect/>
:<IndexRedirect to="/default-path" /> <Route path="/default-path" component={DefaultComponent} />
Jest to oparte na react-router 1.0.0. Zobacz https://github.com/rackt/react-router/blob/master/modules/IndexRedirect.js .
źródło
Route
do czegoś, co jest już obsługiwane przez CiebieIndexRoute
?/
zamiast przekierowywania do np/home
.<IndexRoute>
. Przepraszam za hałas. stackoverflow.com/questions/32706913/… github.com/reactjs/react-router/blob/master/docs/guides/…Odpowiedź Jonathana wydawała się nie działać dla mnie. Używam React v0.14.0 i React Router v1.0.0-rc3. To zrobiło:
<IndexRoute component={Home}/>
.Więc w przypadku Matthew myślę, że chciałby:
<IndexRoute component={SearchDashboard}/>
.Źródło: https://github.com/rackt/react-router/blob/master/docs/guides/advanced/ComponentLifecycle.md
źródło
SearchDashboard
będzie komponentem, który zobaczysz po dotarciu na stronę główną, ale nie tymDashboard
, który ją opakowuje, jeśli przejdziesz bezpośrednio do/dashboard/searchDashboard
. React-router dynamicznie buduje hierarchię zagnieżdżonych komponentów na podstawie tras dopasowanych do adresu URL, więc myślę, że naprawdę potrzebujesz tutaj przekierowania.import { Route, Redirect } from "react-router-dom"; class App extends Component { render() { return ( <div> <Route path='/'> <Redirect to="/something" /> </Route> //rest of code here
sprawi to, że po załadowaniu serwera na lokalnym hoście przekieruje cię do / czegoś
źródło
AKTUALIZACJA : 2020
Zamiast używać przekierowania, po prostu dodaj wiele tras w pliku
path
Przykład:
<Route exact path={["/","/defaultPath"]} component={searchDashboard} />
źródło
Natknąłem się na podobny problem; Chciałem domyślnego programu obsługi trasy, jeśli żaden z programów obsługi trasy nie pasuje.
Moje rozwiązanie polega na użyciu symbolu wieloznacznego jako wartości ścieżki. tj. upewnij się również, że jest to ostatni wpis w twojej definicji tras.
<Route path="/" component={App} > <IndexRoute component={HomePage} /> <Route path="about" component={AboutPage} /> <Route path="home" component={HomePage} /> <Route path="*" component={HomePage} /> </Route>
źródło
Dla tych, którzy przyjdą w 2017 roku, jest to nowe rozwiązanie z
IndexRedirect
:<Route path="/" component={App}> <IndexRedirect to="/welcome" /> <Route path="welcome" component={Welcome} /> <Route path="about" component={About} /> </Route>
źródło
<Route name="app" path="/" handler={App}> <Route name="dashboards" path="dashboards" handler={Dashboard}> <Route name="exploreDashboard" path="exploreDashboard" handler={ExploreDashboard} /> <Route name="searchDashboard" path="searchDashboard" handler={SearchDashboard} /> <DefaultRoute handler={DashboardExplain} /> </Route> <Redirect from="/*" to="/" /> </Route>
źródło
DefaultRoute
wreact-router
wersji 4?<Route exact path="/" component={Home}/>
. reaktraining.com/react-router/web/example/basicPreferowaną metodą jest użycie komponentu React router IndexRoutes
Używasz go w ten sposób (pobrane z dokumentów React routera, do których link znajduje się powyżej):
<Route path="/" component={App}> <IndexRedirect to="/welcome" /> <Route path="welcome" component={Welcome} /> <Route path="about" component={About} /> </Route>
źródło
Używasz go w ten sposób, aby przekierować na określony adres URL i renderować komponent po przekierowaniu ze starego routera na nowy router.
<Route path="/old-router"> <Redirect exact to="/new-router"/> <Route path="/new-router" component={NewRouterType}/> </Route>
źródło