【发布时间】:2019-10-02 14:27:52
【问题描述】:
我有两个组件都有这样的开关元素:
function App() {
return (
<div className="App">
<Router>
<AppBar position="static" color="inherit">
<Toolbar>
<Button color="inherit"><Link to="/deployments">Deployments</Link></Button>
<Button color="inherit"><Link to="/tasks">Tasks</Link></Button>
</Toolbar>
</AppBar>
<Switch>
<Route exact path="/tasks" component={TasksPage}>
</Route>
</Switch>
</Router>
</div>
);
}
function TasksPage({match}) {
return (
<div className="DeploymentsPage">
{loading ? <h1>Loading...</h1> :
<div>
<h1>Available Tasks</h1>
<ul>
{tasks.map((el, i) => <li key={i}><Link to={`${match.path}/${el.id}`}>{el.id}</Link></li>)}
</ul>
</div>
}
<Switch>
<Route exact path="/tasks/:id" component={TaskPage} />
</Switch>
</div>
);
}
如果我现在去/tasks/1,TaskPage 不会显示!而如果我将完全相同的 Route 元素移动到 App 的 Switch 中,它就可以正常工作。
这是为什么呢?我尝试按照本教程进行操作:https://reacttraining.com/react-router/web/guides/quick-start
【问题讨论】:
-
您将
exact添加到两个路径。/tasks/1与/tasks不完全相同 -
我认为 Miller 是对的,如果您说该路由仅在
exactly 与/tasks匹配时才应渲染,您希望/tasks/1如何渲染? -
但是 /tasks/1 与 /tasks/:id 完全一致,不是吗? /tasks/1 不呈现 TaskPage,但 /tasks 呈现 TasksPage(我知道命名不好)
-
因为TasksPage 不会呈现,所以它永远不会达到这一点
-
哦,是的,我现在明白了。 TaskPage 仅在呈现 TasksPage 时呈现。而且由于两条路线从未完全匹配,因此未显示
标签: javascript reactjs react-router react-router-v4