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 验证浏览器是否支持javascript的方法小结
May 17 Javascript
JS防止用户多次提交的简单代码
Aug 01 Javascript
jquery利用命名空间移除绑定事件的方法
Mar 11 Javascript
Node.js重新刷新session过期时间的方法
Feb 04 Javascript
jQuery实现的倒计时效果实例小结
Apr 16 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
Jan 23 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
Jan 24 Javascript
Node学习记录之cluster模块
May 31 Javascript
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 jQuery
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
May 22 Javascript
Openlayers3实现车辆轨迹回放功能
Sep 29 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目录与文件操作
2011/12/30 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
什么是事务?事务有哪些性质?
2012/03/11 面试题
学院领导推荐信
2013/10/30 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
设计师个人求职信范文
2014/02/02 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
保密协议书范本
2014/04/22 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
详解Python requests模块
2021/06/21 Python
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript