关于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实现页面跳转的几种方式分享
Oct 26 Javascript
JavaScript中数据结构与算法(一):栈
Jun 19 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
Nov 30 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 Javascript
解决vue 引入子组件报错的问题
Sep 06 Javascript
vue-cli webpack 引入swiper的操作方法
Sep 15 Javascript
zepto.js 实时监听输入框的方法
Dec 04 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
Apr 04 jQuery
vue+element实现打印页面功能
May 20 Javascript
JS数组及对象遍历方法代码汇总
Jun 16 Javascript
微信小程序实现简单的select下拉框
Nov 23 Javascript
JS前端使用canvas实现扩展物体类和事件派发
Aug 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
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
jquery $.ajax入门应用二
2008/11/19 Javascript
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
js实现秒表计时器
2019/12/16 Javascript
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
建筑施工实习自我鉴定
2013/09/19 职场文书
夜大毕业生自我鉴定
2013/10/31 职场文书
小学生班会演讲稿
2014/01/09 职场文书
公司踏青活动方案
2014/08/16 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
长城的导游词
2015/01/30 职场文书
机器人总动员观后感
2015/06/09 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL
SQLServer中exists和except用法介绍
2021/12/04 SQL Server
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript
HttpClient实现文件上传功能
2022/08/14 Java/Android