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 相关文章推荐
jquery 无限级联菜单案例分享
Mar 26 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
Nov 22 Javascript
JavaScript 获取任一float型小数点后两位的小数
Jun 30 Javascript
javascript去掉代码里面的注释
Jul 24 Javascript
分析js闭包引起的事件注册问题
Mar 29 Javascript
基于JQuery打造无缝滚动新闻步骤详解
Mar 31 Javascript
用Node提供静态文件服务的方法
Jul 06 Javascript
vue配置nprogress实现页面顶部进度条
Sep 21 Javascript
js实现左右轮播图
Jan 09 Javascript
js实现无缝轮播图特效
May 09 Javascript
Vue实现跑马灯效果
May 25 Javascript
Webpack的Loader和Plugin的区别
Nov 09 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中使用Oracle数据库(3)
2006/10/09 PHP
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
基于jquery的loading效果实现代码
2010/11/05 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
Python 3中的yield from语法详解
2017/01/18 Python
python日志记录模块实例及改进
2017/02/12 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
Django添加favicon.ico图标的示例代码
2018/08/07 Python
Python调用服务接口的实例
2019/01/03 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
jupyter 添加不同内核的操作
2021/02/06 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
奖学金自我鉴定范文
2013/10/03 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
运动会拉拉队口号
2014/06/09 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
同学会邀请函模板
2015/01/30 职场文书
工作推荐信模板
2015/03/25 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
MongoDB支持的索引类型
2022/04/11 MongoDB