关于react-router的几种配置方式详解


Posted in Javascript onJuly 24, 2017

本文介绍关于react-router的几种配置方式详解,分享给大家,具体如下:

路由的概念

路由的作用就是将url和函数进行映射,在单页面应用中路由是必不可少的部分,路由配置就是一组指令,用来告诉router如何匹配url,以及对应的函数映射,即执行对应的代码。

react-router

每一门JS框架都会有自己定制的router框架,react-router就是react开发应用御用的路由框架,目前它的最新的官方版本为4.1.2。本文给大家介绍的是react-router相比于其他router框架更灵活的配置方式,大家可以根据自己的项目需要选择合适的方式。

1.标签的方式

下面我们看一个例子:

import { IndexRoute } from 'react-router'

const Dashboard = React.createClass({
 render() {
  return <div>Welcome to the app!</div>
 }
})

React.render((
 <Router>
  <Route path="/" component={App}>
   {/* 当 url 为/时渲染 Dashboard */}
   <IndexRoute component={Dashboard} />
   <Route path="about" component={About} />
   <Route path="inbox" component={Inbox}>
    <Route path="messages/:id" component={Message} />
   </Route>
  </Route>
 </Router>
), document.body)

我们可以看到这种路由配置方式使用Route标签,然后根据component找到对应的映射。

  1. 这里需要注意的是IndexRoute这个有点不一样的标签,这个的作用就是匹配'/'的路径,因为在渲染App整个组件的时候,可能它的children还没渲染,就已经有'/'页面了,你可以把IndexRoute当成首页。
  2. 嵌套路由就直接在Route的标签中在加一个标签,就是这么简单

2.对象配置方式

有时候我们需要在路由跳转之前做一些操作,比如用户如果编辑了某个页面信息未保存,提醒它是否离开。react-router提供了两个hook,onLeave在所有将离开的路由触发,从最下层的子路由到最外层的父路由,onEnter在进入路由触发,从最外层的父路由到最下层的自路由。

让我们看代码:

const routeConfig = [
 { path: '/',
  component: App,
  indexRoute: { component: Dashboard },
  childRoutes: [
   { path: 'about', component: About },
   { path: 'inbox',
    component: Inbox,
    childRoutes: [
     { path: '/messages/:id', component: Message },
     { path: 'messages/:id',
      onEnter: function (nextState, replaceState) {
       //do something
      }
     }
    ]
   }
  ]
 }
]

React.render(<Router routes={routeConfig} />, document.body)

3.按需加载的路由配置

在大型应用中,性能是一个很重要的问题,按需要加载JS是一种优化性能的方式。在React router中不仅组件是可以异步加载的,路由也是允许异步加载的。Route 可以定义 getChildRoutes,getIndexRoute 和 getComponents 这几个函数,他们都是异步执行的,并且只有在需要的时候才会调用。

我们看一个例子:

const CourseRoute = {
 path: 'course/:courseId',

 getChildRoutes(location, callback) {
  require.ensure([], function (require) {
   callback(null, [
    require('./routes/Announcements'),
    require('./routes/Assignments'),
    require('./routes/Grades'),
   ])
  })
 },

 getIndexRoute(location, callback) {
  require.ensure([], function (require) {
   callback(null, require('./components/Index'))
  })
 },

 getComponents(location, callback) {
  require.ensure([], function (require) {
   callback(null, require('./components/Course'))
  })
 }
}

这种方式需要配合webpack中有实现代码拆分功能的工具来用,其实就是把路由拆分成小代码块,然后按需加载。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中Image对象以及对其预加载处理示例
Nov 20 Javascript
如何判断微信内置浏览器(通过User Agent实现)
Sep 01 Javascript
javascript实现类似超链接的效果
Dec 26 Javascript
jQuery Easyui 验证两次密码输入是否相等
May 13 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
May 30 Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
Jul 07 Javascript
js实现1,2,3,5数字按照概率生成
Sep 12 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
Sep 27 Javascript
uni app仿微信顶部导航条功能
Sep 17 Javascript
vue打开子组件弹窗都刷新功能的实现
Sep 21 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
Oct 28 Javascript
简单实现js放大镜效果
Jul 24 #Javascript
Vue列表页渲染优化详解
Jul 24 #Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 #Javascript
JavaScript取得gridview中获取checkbox选中的值
Jul 24 #Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 #Javascript
在React中如何优雅的处理事件响应详解
Jul 24 #Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
Jul 24 #Javascript
You might like
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
javascript函数库-集合框架
2007/04/27 Javascript
javascript 函数使用说明
2010/04/07 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
JS异步文件上传(兼容IE8+)
2017/04/02 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
2020/06/01 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
21行Python代码实现拼写检查器
2016/01/25 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
对python 调用类属性的方法详解
2019/07/02 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
思想政治自我鉴定
2013/10/06 职场文书
给物业的表扬信
2014/01/21 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
消防宣传口号
2014/06/16 职场文书
高中班主任评语
2014/12/30 职场文书
骨干教师考核评语
2014/12/31 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
python识别围棋定位棋盘位置
2021/07/26 Python
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL