关于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中CheckBox全选终极方案
May 20 Javascript
jQuery插件datalist实现很好看的input下拉列表
Jul 14 Javascript
详解JavaScript逻辑And运算符
Dec 04 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
Nov 16 Javascript
深入理解react-router@4.0 使用和源码解析
May 23 Javascript
详解如何构建Angular项目目录结构
Jul 13 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
Oct 23 Javascript
微信小程序页面上下滚动效果
Nov 18 Javascript
VsCode与Node.js知识点详解
Sep 05 Javascript
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 Javascript
详解vue v-model
Aug 31 Javascript
electron踩坑之remote of undefined的解决
Oct 06 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
destoon二次开发入门示例
2014/06/20 PHP
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
python 默认参数问题的陷阱
2016/02/29 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
Django 使用logging打印日志的实例
2018/04/28 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
python pygame实现2048游戏
2018/11/20 Python
python实现文本界面网络聊天室
2018/12/12 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
简单了解django文件下载方式
2020/02/10 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
搞笑获奖感言
2014/01/30 职场文书
毕业生就业协议书
2014/04/11 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
护理专业自荐信范文
2015/03/06 职场文书
法人身份证明书
2015/06/18 职场文书
学校运动会简讯
2015/07/20 职场文书
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers
MySQL普通表如何转换成分区表
2022/05/30 MySQL