Обратите внимание на следующее:
var AppRoutes = [
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Page} />
</Route>,
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Header} >
<Route path="/withheader" handler={Page} />
</Route>
</Route>,
<Route handler={App} someProp="defaultProp">
<Route path=":area" handler={Area} />
<Route path=":area/:city" handler={Area} />
<Route path=":area/:city/:locale" handler={Area} />
<Route path=":area/:city/:locale/:type" handler={Area} />
</Route>
];
У меня есть шаблон приложения, шаблон HeaderTemplate и параметризованный набор маршрутов с одним и тем же обработчиком (в шаблоне приложения). Я хочу иметь возможность обслуживать 404 маршрута, когда что-то не найдено. Например, / CA / SanFrancisco должен быть найден и обработан Area, тогда как / SanFranciscoz должен быть 404.
Вот как я быстро тестирую маршруты.
['', '/', '/withheader', '/SanFranciscoz', '/ca', '/CA', '/CA/SanFrancisco', '/CA/SanFrancisco/LowerHaight', '/CA/SanFrancisco/LowerHaight/condo'].forEach(function(path){
Router.run(AppRoutes, path, function(Handler, state){
var output = React.renderToString(<Handler/>);
console.log(output, '\n');
});
});
Проблема в том, что / SanFranciscoz всегда обрабатывается страницей Area, но я хочу, чтобы это было 404. Кроме того, если я добавлю NotFoundRoute к первой конфигурации маршрута, все страницы Area 404.
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Page} />
<NotFoundRoute handler={NotFound} />
</Route>,
Что я делаю не так?
Вот суть, которую можно скачать и поэкспериментировать.
react-router
4m1r
источник
источник
Ответы:
DefaultRoute и NotFoundRoute были удалены в react-router 1.0.0.
Я хотел бы подчеркнуть, что для работы маршрут по умолчанию со звездочкой должен быть последним на текущем уровне иерархии. В противном случае он переопределит все другие маршруты, которые появляются после него в дереве, потому что он первый и соответствует каждому пути.
Для реактивного маршрутизатора 1, 2 и 3
Если вы хотите отобразить 404 и сохранить путь (те же функции, что и NotFoundRoute)
Если вы хотите отобразить страницу 404, но изменить URL-адрес (те же функции, что и DefaultRoute)
Пример с несколькими уровнями:
Для реактивных маршрутизаторов 4 и 5
Держи путь
Перенаправить на другой маршрут (сменить URL)
Порядок имеет значение!
источник
<Redirect from='*' to='/home' />
в этом syntaxe:const routes = { component: Main, childRoutes: [ { path: '/', component: Home }, ], indexRoute: { component: Main, }, };
<Route render={(props)=> <MyComponent myProp={someVar} {...props} />} />
В более новых версиях response-router вы хотите обернуть маршруты в Switch, который отображает только первый совпавший компонент. В противном случае вы увидите несколько визуализированных компонентов.
Например:
источник
path="*"
в NotFound Route. Если пропуститьpath
, маршрут всегда будет совпадать.path
полностью для неизвестных маршрутовВ новой версии React Router (сейчас используется 2.0.1) вы можете использовать звездочку в качестве пути для маршрутизации всех «других путей».
Так это выглядело бы так:
источник
Это ответ для response-router-4. Вы можете обернуть все маршруты в блок Switch, который работает так же, как выражение switch-case, и отображает компонент с первым совпадающим маршрутом. например)
Когда использовать
exact
Без точного:
С точным:
Теперь, если вы принимаете параметры маршрутизации, и если они оказываются неверными, вы можете обработать их в самом целевом компоненте. например)
Теперь в ProfilePage.js
Для получения дополнительной информации вы можете пройти через этот код:
App.js
ProfilePage.js
источник
Согласно документации , маршрут был найден, хотя ресурса нет.
Итак, вы всегда можете добавить строку
Router.run()
перед,React.render()
чтобы проверить, действителен ли ресурс. Просто передайте опору компоненту или заменитеHandler
компонент пользовательским, чтобы отобразить представление NotFound.источник
<Route path="*" to="/dest" />
или<Redirect from="*" to="/dest" />
в качестве последнегоЯ только что взглянул на ваш пример, но если я правильно понял, вы пытаетесь добавить 404 маршрута к динамическим сегментам. У меня была такая же проблема пару дней назад, я нашел # 458 и # 1103 и закончил с ручной проверкой в функции рендеринга:
надеюсь, это поможет!
источник