关于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 相关文章推荐
javascript中使用css需要注意的地方小结
Sep 01 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
Dec 12 Javascript
jQuery中Dom的基本操作小结
Jan 23 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
Aug 04 Javascript
用NODE.JS中的流编写工具是要注意的事项
Mar 01 Javascript
Angular实现的简单定时器功能示例
Dec 28 Javascript
vue后台管理之动态加载路由的方法
Aug 13 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 jQuery
简单了解JavaScript中常见的反模式
Jun 21 Javascript
vue 实现tab切换保持数据状态
Jul 21 Javascript
js实现鼠标点击飘爱心效果
Aug 19 Javascript
antd配置config-overrides.js文件的操作
Oct 31 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函数method_exists()与is_callable()的区别
2013/06/21 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
Python标准库内置函数complex介绍
2014/11/25 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
Python数据类型详解(四)字典:dict
2016/05/12 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
python实现微信小程序自动回复
2018/09/10 Python
Python对excel文档的操作方法详解
2018/12/10 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
工程力学硕士生的自我评价范文
2013/11/16 职场文书
自荐书封面下载
2013/11/29 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
倡议书格式
2014/04/14 职场文书
网页美工求职信范文
2014/04/17 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
计划生育目标责任书
2015/05/09 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
MYSQL如何查看进程和kill进程
2022/03/13 MySQL
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python
Java对文件的读写操作方法
2022/04/29 Java/Android
TypeScript 内置高级类型编程示例
2022/09/23 Javascript