React Router 不会在子组件的 Route 上渲染新组件
React Router does not render new component on Route of child component
在App.js
let routes = (
<Switch>
<Route path="/signin" component={SignIn} />
<Redirect to="/signin" />
</Switch>
)
// routes when user signed in
if (this.props.isAuthenticated) {
routes = (
<Switch>
<Route path="/signout" component={SignOut} />
<Route path="/" exact component={Dashboard} />
<Redirect to="/" />
</Switch>
)
}
return (
<div>
{routes}
</div>
);
这些组件和路由一切正常。但是在仪表盘上。我也想有不同的路线。在下面的代码中,角色始终 = admin to test
render() {
let routes = null;
switch (this.props.role) {
case ('admin'):
routes = (
<Switch>
<Route path='/uploads' component={UploadFileArea} />
</Switch>
);
break;
case ('student'):
break;
case ('lecturer'):
break;
default: routes = null;
}
return (
<div>
<NavigationBar username={this.props.username}/>
<NavLink to='/uploads'>Uploads</NavLink>
{routes}
</div>
);
我不明白为什么到 /uploads 的路由永远不起作用,它总是将我定向到仪表板“/”。将 <Route path='/uploads' component={UploadFileArea} />
放入 App.js 仍然有效
这是因为您的 /
路径上有 exact
标志。如果您转到 /uploads
,那么您的顶级路由将不会匹配任何内容,并将重定向回 /
。如果您删除 exact
标志,它将起作用,除非您在 /signout
时它也会呈现。
最简单的解决方法是为您的斜杠路径指定一个唯一的名称,例如 /dashboard
,然后将 /
重定向到 /dashboard
。然后确保在您的仪表板组件中,您的上传路径的路径是 /dashboard/uploads
.
在App.js
let routes = (
<Switch>
<Route path="/signin" component={SignIn} />
<Redirect to="/signin" />
</Switch>
)
// routes when user signed in
if (this.props.isAuthenticated) {
routes = (
<Switch>
<Route path="/signout" component={SignOut} />
<Route path="/" exact component={Dashboard} />
<Redirect to="/" />
</Switch>
)
}
return (
<div>
{routes}
</div>
);
这些组件和路由一切正常。但是在仪表盘上。我也想有不同的路线。在下面的代码中,角色始终 = admin to test
render() {
let routes = null;
switch (this.props.role) {
case ('admin'):
routes = (
<Switch>
<Route path='/uploads' component={UploadFileArea} />
</Switch>
);
break;
case ('student'):
break;
case ('lecturer'):
break;
default: routes = null;
}
return (
<div>
<NavigationBar username={this.props.username}/>
<NavLink to='/uploads'>Uploads</NavLink>
{routes}
</div>
);
我不明白为什么到 /uploads 的路由永远不起作用,它总是将我定向到仪表板“/”。将 <Route path='/uploads' component={UploadFileArea} />
放入 App.js 仍然有效
这是因为您的 /
路径上有 exact
标志。如果您转到 /uploads
,那么您的顶级路由将不会匹配任何内容,并将重定向回 /
。如果您删除 exact
标志,它将起作用,除非您在 /signout
时它也会呈现。
最简单的解决方法是为您的斜杠路径指定一个唯一的名称,例如 /dashboard
,然后将 /
重定向到 /dashboard
。然后确保在您的仪表板组件中,您的上传路径的路径是 /dashboard/uploads
.