React Router5 感性认知

简介: 本文主要是了解下 react-router 新版本一些理念,为我们以后的开发注入一些感性认知。react router 目前最新的版本是v5.1.2。

本文主要是了解下 react-router 新版本一些理念,为我们以后的开发注入一些感性认知。

react router 目前最新的版本是v5.1.2。587c2d598a0ef6d7139f2bbddd78caba_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg

v4开始,相较于之前的版本有很大的变化,react 彻底将“Just Component ” 一切皆组件的理念贯彻到底,所以开发方式也发生了极大的变化,从思维上要有所转换。

可能你已经用惯了v3的开发方式,一时难以转变,但是任何新事物的诞生必然有他的理由,当我用过 v5之后,不得不说真的很方便,变得更简单,更灵活。

下面简单的说下从 v4 开始的一些重大的改进

分包


v4 之前只有一个库 react-router

v4开始分为了两个库

  • react-router 核心库
  • react-router-dom 用来操作 DOM

当然还有react-router-native

这可以理解成在架构上做了一些调整,通用的和平台无关的能力放在一个库,和平台耦的相关能力放在了一个库,这和我们平时的开发中代码优化差不多。

react最开始也只有一个库。后来拆分开来 reactreact-dom 还有react-native

所以在使用的时候只需要安装react-router-dom即可,核心库属于依赖库,会自动安装。

3ef61cfe51a56fb3b3b46d25b8f1ab47_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

一切皆组件 - 思维模式的转变


既然一切都是组件,那么我们可以按照以往写组件的方式来使用路由,也可以把路由和其他组件写在一起,可以当做 UI 组件的一部分来进行渲染。

升级之后的 RouteLinkSwitchBrowerRouterHashRouter等都是一个普通的组件。

//v3
<Router history={browserHistory}></Router>
//v4
<BrowerRouter></BrowerRouter>
//v4  新增 Switch 组件
<Switch><Route></Route></Switch>

非集中式路由 - 更灵活


v4之前版本我们只能将路由规则集中写在一起,无法和其他的组件写在一起,更像是api的组合。

看下 v3的写法

import { Router, Route, IndexRoute } from 'react-router'
const Layout = props => (
  <div className="Layout-box">
    <header>
      React Router 3 App
    </header>
    <main>
      {props.children}
    </main>
  </div>
)
const HomePage =() => <div>Home Page</div>
const UsersPage = () => <div>Users Page</div>
const App = () => (
  <Router history={browserHistory}>
    <Route path="/" component={Layout}>
      <IndexRoute component={HomePage} />
      <Route path="/users" component={UsersPage} />
    </Route>
  </Router>
)
render(<App />, document.getElementById('root'))

上面就是v3的一种集中式路由,布局和页面组件是独立的,所有组件都只是路由的一个参数。

React Router 4 开始 不再主张集中式路由了(当然可以继续使用),路由规则可以写在布局和 UI 组件之间。

以下是 v4 中的写法:

import { BrowserRouter, Route } from 'react-router-dom'
const Layout = () => (
  <div className="layout-box">
    <header>
     React Router 4 App
    </header>
    <main>
      <Route path="/" exact component={HomePage} />
      <Route path="/users" component={UsersPage} />
    </main>
  </div>
)
const HomePage =() => <div>Home Page</div>
const UsersPage = () => <div>Users Page</div>
const App = () => (
  <BrowserRouter>
    <Layout />
  </BrowserRouter>
)
render(<App />, document.getElementById('root'))

v4的写法其实更符合组件式开发的理念,路由组件可以更灵活的被使用。

最后


本文主要是简单的介绍了 v3 以后的路由理念和使用方式以及个人的理解,更多具体各个组件的使用会分为多个章节来完成,同时会配备相关的 demo。

暂定目录如下:

  • BrowserRouter  HashRouter 组件
  • Link VS NavLink 组件
  • Redirect 组件应用
  • Route 组件应用
  • Switch 排他性路由
  • 静态路由组件 StaticRouter
  • 组件匹配
  • 嵌套布局
  • 异步组件加载
  • 其他
目录
相关文章
|
3月前
|
存储 资源调度 前端开发
React原理 即 React路由基础
React原理 即 React路由基础
68 1
|
前端开发 开发者
Umi 4 特性 02:React Router 6 和新路由
Umi 4 特性 02:React Router 6 和新路由
954 0
|
7天前
|
移动开发 API UED
React-Router 基础学习
React-Router 基础学习
15 0
|
3月前
|
前端开发
【掰开揉碎】React Router——React应用导航(二)
【掰开揉碎】React Router——React应用导航(二)
|
9月前
从零开始学习React-路由react-router配置(四)
从零开始学习React-路由react-router配置(四)
31 0
|
前端开发 API 网络架构
|
前端开发 开发者
|
存储 JavaScript 前端开发
|
移动开发 资源调度 前端开发
|
监控 前端开发
React Router3到5 升级小记
现在都 React Router 5 了,你是不是还在用v3呢? 不光是你在用,我们很多项目也在用,懒得升级,感觉改动太大,升级了后谁知道会出什么问题,别没事找事。 毕竟v4是两年前的了,再不升级真的就有点说不过去了,直接拿一个小项目开刀,直接3-5吧,整体来说还好,v5版完全向下兼容react15,所以如果你的 react 是15的话没啥影响。 这里就简单的总结下,这次升级的一些内容。
112 1
React Router3到5 升级小记