关于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 相关文章推荐
一个无限级XML绑定跨框架菜单(For IE)
Jan 27 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 Javascript
javascript中定义类的方法详解
Feb 10 Javascript
跟我学习javascript的闭包
Nov 16 Javascript
非常酷炫的Bootstrap图片轮播动画
May 27 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
Nov 09 Javascript
js脚本编写简单刷票投票系统
Jun 27 Javascript
微信小程序icon组件使用详解
Jan 31 Javascript
vue移动端路由切换实例分析
May 14 Javascript
原生js实现公告滚动效果
Jan 10 Javascript
JS实现使用POST方式发送请求
Aug 30 Javascript
微信小程序 自定义弹窗实现过程(附代码)
Dec 05 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
Python实现的密码强度检测器示例
2017/08/23 Python
python简单实现操作Mysql数据库
2018/01/29 Python
python多任务及返回值的处理方法
2019/01/22 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
2014年创卫实施方案
2014/02/18 职场文书
项目合作协议书范本
2014/04/16 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
工作失职检讨书500字
2014/10/17 职场文书
查摆问题整改措施
2014/10/24 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
纯html+css实现Element loading效果
2021/08/02 HTML / CSS
python之json文件转xml文件案例讲解
2021/08/07 Python