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拦截alert对话框另类应用
Jan 16 Javascript
文档对象模型DOM通俗讲解
Nov 01 Javascript
使用js画图之饼图
Jan 12 Javascript
javascript 兼容各个浏览器的事件
Feb 04 Javascript
理解Javascript文件动态加载
Jan 29 Javascript
javascript基本数据类型和转换
Mar 17 Javascript
TypeScript入门-基本数据类型
Mar 28 Javascript
angular+ionic返回上一页并刷新页面
Aug 08 Javascript
JavaScript实现多重继承的方法分析
Jan 09 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
Jan 27 Javascript
如何安装控制器JavaScript生成插件详解
Oct 21 Javascript
AngularJS动态生成select下拉框的方法实例
Nov 17 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
escape unescape的php下的实现方法
2007/04/27 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
php如何把表单内容提交到数据库
2019/07/08 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
javascript 中的 delete及delete运算符
2015/11/15 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
jQuery pagination分页示例详解
2018/10/23 jQuery
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
extern在函数声明中是什么意思
2014/01/19 面试题
军训心得体会
2013/12/31 职场文书
初中班主任评语大全
2014/04/24 职场文书
群众路线专项整治方案
2014/10/27 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
毕业答辩开场白范文
2015/05/27 职场文书