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的一种模块模式
Sep 08 Javascript
JS判断元素为数字的奇异写法分享
Aug 01 Javascript
js实现单行文本向上滚动效果实例代码
Nov 28 Javascript
Window.Open如何在同一个标签页打开
Jun 20 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
Oct 17 Javascript
Javascript 构造函数详解
Oct 22 Javascript
JavaScript中常见获取元素的方法汇总
Mar 04 Javascript
JS+CSS相对定位实现的下拉菜单
Oct 06 Javascript
设置点击文本框或图片弹出日历控件的实现代码
May 12 Javascript
JavaScript常见的五种数组去重的方式
Dec 15 Javascript
vue.js 中使用(...)运算符报错的解决方法
Aug 09 Javascript
JavaScript函数apply()和call()用法与异同分析
Aug 10 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
杏林同学录(三)
2006/10/09 PHP
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
PHP中使用gettext来支持多语言的方法
2011/05/02 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
JavaScript中的集合及效率
2010/01/08 Javascript
javascript定时器完整实例
2015/02/10 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
Python标准库之collections包的使用教程
2017/04/27 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
Python实现的栈(Stack)
2018/01/26 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
早读迟到检讨书
2014/01/24 职场文书
清扬洗发水广告词
2014/03/14 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
SQL语句多表联合查询的方法示例
2022/04/18 MySQL