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 相关文章推荐
js或者jquery判断图片是否加载完成实现代码
Mar 20 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
Aug 29 Javascript
js用Date对象的setDate()函数对日期进行加减操作
Sep 18 Javascript
同一个网页中实现多个JavaScript特效的方法
Feb 02 Javascript
JavaScript中5种调用函数的方法
Mar 12 Javascript
ES6新特性八:async函数用法实例详解
Apr 21 Javascript
vue开发调试神器vue-devtools使用详解
Jul 13 Javascript
JavaScript中附件预览功能实现详解(推荐)
Aug 15 Javascript
JS鼠标3次点击事件实现代码及扩展思路
Sep 12 Javascript
JS随机排序数组实现方法分析
Oct 11 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 Vue.js
Python机器学习之决策树和随机森林
Jul 15 Javascript
用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
新浪新闻小偷
2006/10/09 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
分享php邮件管理器源码
2016/01/06 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
Python生成器generator原理及用法解析
2020/07/20 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
员工晚婚的请假条
2014/02/08 职场文书
厕所文明标语
2014/06/11 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python