【发布时间】:2017-09-03 11:43:01
【问题描述】:
当我在 React Router V4 中有嵌套路由时,如何将用户重定向到 NoMatch 组件?
这是我的代码:
import React from 'react';
import ReactDOM from 'react-dom';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();
import {
BrowserRouter as Router,
Route,
Switch
}
from 'react-router-dom';
import Website from './website/Website';
const Register = ({ match}) => {
return (
<div>
<Route exact path={match.url} render={() => {return <h1>Register</h1>} } />
<Route path={`${match.url}/detail`} render={()=>{return <h1>Register Detail</h1>}} />
</div>
)
}
const App = () => (
<Router>
<Switch>
<Route exact path="/" render={() => {return <h1>Home</h1> }} />
<Route path="/register" component={Register} />
<Route component={() => {return <h1>Not found!</h1>}} />
</Switch>
</Router>
);
ReactDOM.render(
<App/>, document.getElementById('root'));
如您所见,Register 下方有一个 NoMatch 路由,但我不想在我的子组件 Register 上使用相同的路由映射。这样,如果我去 /register/unregisteredmatch 页面只是显示空白,因为不要输入 NoMatch Route。
如何在不指定子路由的情况下映射全局 NoMatch?我不想将此责任传递给子组件。
谢谢。
【问题讨论】:
-
您将需要创建 HoC,无论它内部是否有匹配的子路由,注册都会始终呈现。所以你需要为此创建一个处理程序
-
@ReiDien 如果我理解的话,我需要做的是创建一个封装 NoMatch 处理程序的“抽象”组件......我说的对吗?谢谢
标签: javascript reactjs nested-routes react-router-v4 no-match