React-router v4 路由配置方法小结


Posted in Javascript onAugust 08, 2017

本文主要介绍了React-router v4 路由配置方法小结,分享给大家,也给自己留个笔记

一. Switch 、Router 、Route三者的区别

1、Route

Route 是建立location 和 ui的最直接联系

2、Router

react-router v4 中,Router被拆分成了StaticRouter、MemoryRouter、BrowserRouter、HashRouter、NativeRouter。

MemoryRouter、BrowserRouter、HashRouter 等于

import { Router } from 'react-router'
<!--这里可以有三种-->
<!--history 部分源码
exports.createBrowserHistory = _createBrowserHistory3.default;
exports.createHashHistory = _createHashHistory3.default;
exports.createMemoryHistory = _createMemoryHistory3.default;
-->
import createBrowserHistory from 'history/createBrowserHistory'
//
const history = createBrowserHistory()

<Router history={history}>
 <App/>
</Router>

NativeRouter(给rn使用的)

A <Router> for iOS and Android apps built using React Native.

这里新增strict 和 exact

使用了strict location 大于等于path才能匹配,eq path='/one' location='/one/a'能匹配。

使用了exact location 约等于 path 才能匹配,eq path='/one' location='/one'或者 '/one/'能匹配,所以说是约等于。

使用了exact 和 strict location = path才能匹配

StaticRouter(后续补充)

3、Switch

这是v4版本中新添加,主要用来做唯一匹配的功能。就是想要在众多路由中只匹配其中一个路由。

二、v4 版本中路由应该如何配置呢?

1.基本配置(这个和v3中基本一致,效果也基本一样)

匹配 <= location eq.( /b => / + /b ) ( / => / )

<BrowserRouter forceRefresh={!supportsHistory} keyLength={12}>
   <div>
     <Route path="/" component={aContainer} />
     <Route path="/b" component={bContainer} />
   </div>
  </BrowserRouter>

2.含Switch 配置

匹配 <= location eq.( /b => /b ) ( / => / ) 唯一匹配

<BrowserRouter forceRefresh={!supportsHistory} keyLength={12}>
   <Switch>
       //这里用exact,仅仅是担心location被 path='/'截胡了。
     <Route exact path="/" component={aContainer} />
     <Route path="/b" component={bContainer} />
   </Switch>
  </BrowserRouter>

问题(三个问题)

1.如何设置公共的Component

第一种方式

<BrowserRouter forceRefresh={!supportsHistory} keyLength={12}>
   <div>
     <Route path="/" component={aContainer} />
     <Route path="/b" component={bContainer} />
   </div>
  </BrowserRouter>

第二种方式(父子嵌套)

<BrowserRouter forceRefresh={!supportsHistory} keyLength={12}>
   <div >
    <Route path="/" component={aContainer} />
    <Route path="/b" component={Parent} />
    {/* {app()} */}
   </div>
  </BrowserRouter>
const Parent = ({ match }) => (
 <div>
  <Route path={`${match.url}/`} component={bContainer} />
  <Route path={`${match.url}/c`} component={cContainer} />
  <Route path={`${match.url}/d`} component={dContainer} />
 </div>
);

这种情况 bContainer就是是公用的Component

2.如何设置getComponent,按需加载

3.是否有简化写法

npm install --save react-router-config

第一步 配置路由

const routes = [
 { component: bContainer,
  routes: [
   { path: '/',
    exact: true,
    component: bContainer
   },
   { path: '/b/b',
    component: bContainer,
    routes: [
     { path: '/b/b/b',
      component: bContainer
     }
    ]
   }
  ]
 }
]

第二步 设置路由

<BrowserRouter forceRefresh={!supportsHistory} keyLength={12}>
   <div >
     {renderRoutes(routes)}
   </div>
 </BrowserRouter>

第三步 需要在container的render中去调用方法

<div>
 1111
 {renderRoutes(this.props.route.routes)}
</div>

这个优势是可以统一配置,劣势是需要在container中统一调用,但是这个抽出来统一实现,问题也不大,并且还可以解决 问题一。

这个renderRoutes实际是就是用一层Switch和多个Route来包了一层。

React-router v4 路由配置方法小结

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery validate 中文API 附validate.js中文api手册
Jul 31 Javascript
JavaScript简单实现鼠标拖动选择功能
Mar 06 Javascript
Javascript编程中几种继承方式比较分析
Nov 28 Javascript
第一次接触JS require.js模块化工具
Apr 17 Javascript
深入理解js promise chain
May 05 Javascript
jQuery实现简单倒计时功能的方法
Jul 04 Javascript
javascript匀速动画和缓冲动画详解
Oct 20 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
js canvas实现适用于移动端的百分比仪表盘dashboard
Jul 18 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
vue实现配置全局访问路径头(axios)
Nov 01 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
Apr 04 jQuery
用Vue.extend构建消息提示组件的方法实例
Aug 08 #Javascript
基于Vue实现页面切换左右滑动效果
Jun 29 #Javascript
VUE实现表单元素双向绑定(总结)
Aug 08 #Javascript
ES6模块化的import和export用法方法总结
Aug 08 #Javascript
Vue项目中quill-editor带样式编辑器的使用方法
Aug 08 #Javascript
webpack 2.x配置reactjs基本开发环境详解
Aug 08 #Javascript
vue-quill-editor实现图片上传功能
Aug 08 #Javascript
You might like
php foreach 参数强制类型转换的问题
2010/12/10 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
Javascript 读书笔记索引贴
2010/01/11 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
ASP.NET jquery ajax传递参数的实例
2016/11/02 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
python字符串,数值计算
2016/10/05 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
Python向excel中写入数据的方法
2019/05/05 Python
使用Python实现分别输出每个数组
2019/12/06 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
部门年终奖分配方案
2014/05/07 职场文书
见义勇为事迹材料
2014/12/24 职场文书
原告离婚代理词
2015/05/23 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
Python采集股票数据并制作可视化柱状图
2022/04/04 Python