reactjs - react-router 4中IndexRoute的替代品
问题描述
我正在学习一门课程,其中作者使用react-router
版本 3 编写了一些用于路由的代码。
<Router history={browserHistory} >
<Route path="/" component={Main}>
<IndexRoute component={PhotoGrid}></IndexRoute>
<Route path="/view/:postId" component={Single}>
</Route>
</Router>
在学习课程时(我正在使用router
版本 4),我知道现在<IndexRoute>
不存在。我搜索了替代方案,发现这exact
是替代方案。但我不知道如何使用exact
来满足这个要求。作者希望Main
组件始终在 DOM 上,并且基于 url 只有子组件应该更改(即Single
或PhotoGrid
)。
我尝试了下面的代码,这当然是错误的:
<BrowserRouter>
<Switch>
<Route path="/" component={Main} />
<Route exact path="/" component={PhotoGrid} />
<Route path="/veiw/:postId" component={Single} />
</Switch>
</BrowserRouter>
我的组件是:
class Main extends React.Component {
render() {
return (
<div>
<h1>
<Link to="/">Reduxtagram</Link>
</h1>
{React.cloneElement(this.props.children, this.props)}
</div>
);
}
}
class PhotoGrid extends React.Component {
render() {
return <div className="photo-grid">PhotoGrid</div>;
}
}
class Single extends React.Component {
render() {
return <div className="single-photo">Single</div>;
}
}
解决方案
该Switch
组件只会渲染第Route
一个匹配的。
您可以将Main
组件用作常规组件并使用Switch
as children
。
<BrowserRouter>
<Main>
<Switch>
<Route exact path="/" component={PhotoGrid} />
<Route path="/view/:postId" component={Single} />
</Switch>
</Main>
</BrowserRouter>
推荐阅读
- python - TimeoutError: [WinError 10060] 在 Windows Server 中使用 smtplib
- sorting - 生成一个变量,它是另一个变量的两个值的比率
- c# - ItemsControl.ItemsSource 如何从不实现 IEnumerable 的东西绑定?
- python - time.process_time() 给出常量值
- c# - 尝试创建 c++/winrt 组件并添加对 UWP 应用程序的引用,但失败了
- html - Angular,如何在下拉按钮上显示下拉项目*
- python-3.x - 从零开始的神经网络(调试)
- c - 如何将多个值从 C 程序传递到 shell 脚本
- python - 使用 matplotlib 时拉伸轴
- postgresql - 为什么同一行的循环更新越来越慢?(postges 12)