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的几种方法小结
Apr 25 Javascript
HTML Color Picker(js拾色器效果)
Aug 27 Javascript
jquery对象和javascript对象即DOM对象相互转换
Aug 07 Javascript
jquery 取子节点及当前节点属性值的方法
Aug 24 Javascript
使用JavaScript获取地址栏参数的方法
Dec 19 Javascript
详解JavaScript的while循环的使用
Jun 03 Javascript
学习JavaScript设计模式(继承)
Nov 26 Javascript
理解JavaScript表单的基础知识
Jan 25 Javascript
BootStrap中Table分页插件使用详解
Oct 09 Javascript
基于jQuery实现简单人工智能聊天室
Feb 10 Javascript
解决IE7中使用jQuery动态操作name问题
Aug 28 jQuery
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
Sep 30 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扩展模块memcached长连接使用方法分析
2014/12/24 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
Laravel实现表单提交
2017/05/07 PHP
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
react-native之ART绘图方法详解
2017/08/08 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
Python 元组(Tuple)操作详解
2014/03/11 Python
Django URL传递参数的方法总结
2016/08/28 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python使用正则表达式(Regular Expression)方法超详细
2019/12/30 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
计算机专业学生的自我评价
2013/12/15 职场文书
中考冲刺决心书
2014/03/11 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
2014年车间工作总结
2014/11/21 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
python3读取文件指定行的三种方法
2021/05/24 Python
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers