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 相关文章推荐
javascript下对于事件、事件流、事件触发的顺序随便说说
Jul 17 Javascript
基于jquery的滚动鼠标放大缩小图片效果
Oct 27 Javascript
javascript实现一个数值加法函数
Jun 26 Javascript
jquery自定义右键菜单、全选、不连续选择
Mar 01 Javascript
JS跨域解决方案之使用CORS实现跨域
Apr 14 Javascript
Bootstrap表单组件教程详解
Apr 26 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
Mar 25 Javascript
Vue.js单向绑定和双向绑定实例分析
Aug 14 Javascript
JavaScript之实现一个简单的Vue示例
Jan 17 Javascript
微信小程序封装分享与分销功能过程解析
Aug 13 Javascript
微信小程序拼接图片链接无底洞深入探究
Sep 03 Javascript
vue 实现强制类型转换 数字类型转为字符串
Nov 07 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
php 取得瑞年与平年的天数的代码
2009/08/10 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
Python中for循环控制语句用法实例
2015/06/02 Python
使用Python对Excel进行读写操作
2017/03/30 Python
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
自我鉴定思想方面
2013/10/07 职场文书
素质拓展感言
2014/01/29 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
食品业务员岗位职责
2014/03/18 职场文书
2014年派出所工作总结
2014/11/21 职场文书
房产遗嘱范本
2015/08/06 职场文书
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server