Как установить DefaultRoute на другой маршрут в маршрутизаторе React
у меня есть следующие:
<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>
при использовании DefaultRoute SearchDashboard отображается неправильно, так как любая * панель должна отображаться в панели мониторинга.
Я хотел бы для моего DefaultRoute в маршруте "app" указать на маршрут "searchDashboard". Это то, что я могу сделать с маршрутизатором React, или я должен использовать обычный Javascript (для перенаправления страницы) для этого?
в основном, если пользователь переходит на домашнюю страницу, Я хочу отправить их вместо этого на панель поиска. Поэтому я думаю, что ищу функцию маршрутизатора React, эквивалентную window.location.replace("mygreathostname.com/#/dashboards/searchDashboard");
9 ответов
вы можете использовать перенаправление вместо DefaultRoute
<Redirect from="/" to="searchDashboard" />
я неправильно пытаюсь создать путь по умолчанию:
<IndexRoute component={DefaultComponent} />
<Route path="/default-path" component={DefaultComponent} />
но это создает два разных пути, которые отображают один и тот же компонент. Это не только бессмысленно, но и может вызвать сбои в вашем пользовательском интерфейсе, т. е. когда вы стилизуете <Link/>
элементы на основе this.history.isActive()
.
правильный способ создания маршрута по умолчанию (это не маршрут индекса) - использовать <IndexRedirect/>
:
<IndexRedirect to="/default-path" />
<Route path="/default-path" component={DefaultComponent} />
это основано на react-router 1.0.0. Видеть https://github.com/rackt/react-router/blob/master/modules/IndexRedirect.js.
проблема с использованием <Redirect from="/" to="searchDashboard" />
Если у вас другой URL, скажите /indexDashboard
и пользователь нажимает обновить или получает URL-адрес, отправленный им, пользователь будет перенаправлен на /searchDashboard
в любом случае.
если вы не хотите, чтобы пользователи могли обновлять сайт или отправлять URL-адреса, используйте это:
<Route exact path="/" render={() => (
<Redirect to="/searchDashboard"/>
)}/>
используйте этот параметр, если searchDashboard
за логин:
<Route exact path="/" render={() => (
loggedIn ? (
<Redirect to="/searchDashboard"/>
) : (
<Redirect to="/login"/>
)
)}/>
ответ Джонатана, похоже, не сработал для меня. Я использую React v0.14.0 и реагировать маршрутизатор v1.0.0-rc3. Это сделало:
<IndexRoute component={Home}/>
.
Так что в случае Мэтью, я думаю, он хотел бы:
<IndexRoute component={SearchDashboard}/>
.
источник: https://github.com/rackt/react-router/blob/master/docs/guides/advanced/ComponentLifecycle.md
для тех, кто приходит в 2017, это новое решение с IndexRedirect
:
<Route path="/" component={App}>
<IndexRedirect to="/welcome" />
<Route path="welcome" component={Welcome} />
<Route path="about" component={About} />
</Route>
<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>
предпочтительным методом является использование маршрутизатора react IndexRoutes компонент
вы используете его так (взято из документов react router, связанных выше):
<Route path="/" component={App}>
<IndexRedirect to="/welcome" />
<Route path="welcome" component={Welcome} />
<Route path="about" component={About} />
</Route>
я столкнулся с аналогичной проблемой; мне нужен обработчик маршрута по умолчанию, если ни один из обработчиков маршрута не совпадает.
мои решения-использовать подстановочный знак в качестве значения пути. то есть Также убедитесь, что это последняя запись в определении маршрутов.
<Route path="/" component={App} >
<IndexRoute component={HomePage} />
<Route path="about" component={AboutPage} />
<Route path="home" component={HomePage} />
<Route path="*" component={HomePage} />
</Route>
import { Route, Redirect } from "react-router-dom";
class App extends Component {
render() {
return (
<div>
<Route path='/'>
<Redirect to="/something" />
</Route>
//rest of code here
это сделает так, что при загрузке сервера на локальный хост он снова направит вас к /something