react-router 从 v2/v3 to v4 迁移
2017-06-14 10:56
387 查看
英文原文地址
react-router v4 是完全重写的,所以没有简单的迁移方式,这份指南将为您提供一些步骤,以帮助您了解如何升级应用程序。
注意: 这份迁移指南适用于react-router v2和v3,但为简洁起见,对以前版本的引用仅提及v3。
The Router
Routes
路由嵌套
on* 属性
Switch
此外,您可以使用
使用 react-router v4,一个最大的改变就是可以有很多不同的 router 组件,每个 router 组件都会为您创造出一个
在v4中,没有集中的路由配置。任何需要根据路由渲染内容的地方,您只需渲染一个
有一点需要注意的就是 router 组件只能被赋予一个子元素
使用 v4,您可以像常规的 React 程序一样布局您应用中的组件,您要根据位置(特别是其
在 v4,
当嵌套的
使用 v4,子
react-router v3 提供
使用 v4,你将会使用生命周期方法 通过
在v3中,您可以指定一些子路由,并且只会渲染匹配到的第一个。
v4 通过
react-router v4 是完全重写的,所以没有简单的迁移方式,这份指南将为您提供一些步骤,以帮助您了解如何升级应用程序。
注意: 这份迁移指南适用于react-router v2和v3,但为简洁起见,对以前版本的引用仅提及v3。
The Router
Routes
路由嵌套
on* 属性
Switch
The Router
在react-router v3中,仅有一个<Router>组件,需要提供 history 对象作为他的属性 (prop)。
此外,您可以使用
routes作为
<Router>的属性 (prop) 或者作为
children的方式来定义程序的路由结构。
// v3 import routes from './routes' <Router history={browserHistory} routes={routes} /> // or <Router history={browserHistory}> <Route path='/' component={App}> // ... </Route> </Router>
使用 react-router v4,一个最大的改变就是可以有很多不同的 router 组件,每个 router 组件都会为您创造出一个
history对象,
<BrowserRouter>会创建 brower history,
<HashRouter>会创建 hash history,
<MemoryRouter>会创建 memory history。
在v4中,没有集中的路由配置。任何需要根据路由渲染内容的地方,您只需渲染一个
<Route>组件。
// v4 <BrowserRouter> <div> <Route path='/about' component={About} /> <Route path='/contact' component={Contact} /> </div> </BrowserRouter>
有一点需要注意的就是 router 组件只能被赋予一个子元素
// yes <BrowserRouter> <div> <Route path='/about' component={About} /> <Route path='/contact' component={Contact} /> </div> </BrowserRouter> // no <BrowserRouter> <Route path='/about' component={About} /> <Route path='/contact' component={Contact} /> </BrowserRouter>
Routes
在 v3,<Route>并不是一个组件,相反,您程序中所有的
<Route>元素仅用于创建路由配置对象。
/// in v3 the element <Route path='contact' component={Contact} /> // 相当于 { path: 'contact', component: Contact }
使用 v4,您可以像常规的 React 程序一样布局您应用中的组件,您要根据位置(特别是其
pathname)呈现内容的任何位置,您将呈现
<Route>
在 v4,
<Route>其实是一个组件,所以无论你在哪里渲染
<Route>,它里面的内容都会被渲染。当
<Route>的
path与当前的路径匹配时,它将会渲染
component,
render, or
children属性中的内容,当
<Route>的
path与当前的路径不匹配时,将会渲染
null
路由嵌套
在 v3 中,<Route>组件是作为其父
<Route>组件的
children嵌套其中的。
<Route path='parent' component={Parent}> <Route path='child' component={Child} /> <Route path='other' component={Other} /> </Route>
当嵌套的
<Route>匹配时,react 元素将会使用子
<Route>和 父
<Route>的
component属性去构建,子元素将作为父元素的
children属性。
<Parent {...routeProps}> <Child {...routeProps} /> </Parent 4000 >
使用 v4,子
<Route>应该由父
<Route>呈现。
<Route path='parent' component={Parent} /> const Parent = () => ( <div> <Route path='child' component={Child} /> <Route path='other' component={Other} /> </div> )
on*
属性
react-router v3 提供 onEnter,
onUpdate, and
onLeave方法。这些方法本质上是重写(覆盖)了 react 生命周期方法
使用 v4,你将会使用生命周期方法 通过
<Route>渲染的组件,你可以使用
componentDidMount或
componentWillMount代替
onEnter,你可以使用
componentDidUpdate或者
componentWillUpdate(更或者
componentWillReceiveProps) 代替
onUpdate,你可以使用
componentWillUnmount代替
onLeave。
<Switch>
在v3中,您可以指定一些子路由,并且只会渲染匹配到的第一个。// v3 <Route path='/' component={App}> <IndexRoute component={Home} /> <Route path='about' component={About} /> <Route path='contact' component={Contact} /> </Route>
v4 通过
<Switch>组件提供了相似的功能,当
<Switch>被渲染时,它仅会渲染与当前路径匹配的第一个子
<Route>。
// v4 const App = () => ( <Switch> <Route exact path='/' component={Home} /> <Route path='/about' component={About} /> <Route path='/contact' component={Contact} /> </Switch> )
相关文章推荐
- react-router 从 v2/v3 to v4 迁移(翻译)
- ReactRouter升级 v2 to v4
- ReactRouter升级 v2 to v4
- ReactRouter升级 v2 to v4
- ReactRouter升级 v2 to v4
- ReactRouter升级 v2 to v4
- react-native-router-flux 使用详解(三)
- Webpack + react-router 按需加载
- react+react-router+react-redux全家桶小项目开发过程分享
- React-Router学习
- React router+ webpack实现JS按需加载
- React路由管理 —— React Router 总结
- React-router v4 路由配置方法小结
- react-router学习笔记
- react-router学习随笔
- React Router 详解
- react+react-router+webpack+express+nodejs
- 使用React + Redux + React-router构建可扩展的前端应用
- React-Router (version 4)
- [React] React Router: activeStyle & activeClassName