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 相关文章推荐
juqery 学习之三 选择器 子元素与表单
Nov 25 Javascript
关于COOKIE个数与大小的问题
Jan 17 Javascript
js比较和逻辑运算符的介绍
Mar 10 Javascript
了不起的node.js读书笔记之node.js中的特性
Dec 22 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
Jul 29 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
Nov 18 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
详解webpack分包及异步加载套路
Jun 29 Javascript
vue引入jq插件的实例讲解
Sep 12 Javascript
vue实现输入一位数字转汉字功能
Dec 13 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
Mar 09 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
Jul 26 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
PHP中empty,isset,is_null用法和区别
2017/02/19 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
JS来动态的修改url实现对url的增删查改
2014/09/05 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
简单介绍Python中的struct模块
2015/04/28 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
Django中modelform组件实例用法总结
2020/02/10 Python
PyCharm配置anaconda环境的步骤详解
2020/07/31 Python
python反爬虫方法的优缺点分析
2020/11/25 Python
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
党员示范岗材料
2014/12/19 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
图解上海144收音机
2021/04/22 无线电
用python自动生成日历
2021/04/24 Python
mysql事务隔离级别详情
2021/10/24 MySQL
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android