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中:has选择器用法实例
Dec 30 Javascript
JS输出空格的简单实现方法
Sep 08 Javascript
微信小程序 教程之WXSS
Oct 18 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
Nov 15 Javascript
微信小程序 Button 组件详解及简单实例
Jan 10 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
Jan 19 Javascript
js实现九宫格拼图小游戏
Feb 13 Javascript
关于vue.js过渡css类名的理解(推荐)
Apr 10 Javascript
Js面试算法详解
Apr 08 Javascript
详解在React项目中安装并使用Less(用法总结)
Mar 18 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
May 28 Javascript
JavaScript前端面试扁平数据转tree与tree数据扁平化
Jun 14 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/11/16 PHP
PHP与SQL注入攻击[二]
2007/04/17 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
php和asp语法上的区别总结
2019/05/12 PHP
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
Python基础学习之函数方法实例详解
2019/06/18 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
linux面试题参考答案(10)
2013/11/04 面试题
学校安全教育制度
2014/01/31 职场文书
关于母亲节的感言
2014/02/04 职场文书
《猫》教学反思
2014/02/26 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
vue实现Toast组件轻提示
2022/04/10 Vue.js