关于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 21 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
Dec 27 Javascript
js解析与序列化json数据(二)序列化探讨
Feb 01 Javascript
js过滤HTML标签以及空格的思路及代码
May 24 Javascript
JavaScript DOM 学习总结(五)
Nov 24 Javascript
基于JavaScript实现购物网站商品放大镜效果
Sep 06 Javascript
JS版微信6.0分享接口用法分析
Oct 13 Javascript
seajs模块之间依赖的加载以及模块的执行
Oct 21 Javascript
使用百度地图实现地图网格的示例
Feb 06 Javascript
使用vue-cli webpack 快速搭建项目的代码
Nov 21 Javascript
微信小程序登陆注册功能的实现代码
Dec 10 Javascript
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
Apr 19 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
PHP4引用文件语句的对比
2006/10/09 PHP
第七节--类的静态成员
2006/11/16 PHP
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
PHP创建XML接口示例
2019/07/04 PHP
laravel-admin 实现在指定的相册下添加照片
2019/10/21 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
详细讲解JS节点知识
2010/01/31 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
Python 通过pip安装Django详细介绍
2017/04/28 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
详解python中的线程与线程池
2019/05/10 Python
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
配置管理计划的主要内容有哪些
2014/06/20 面试题
大学军训通讯稿
2014/01/13 职场文书
怀念母亲教学反思
2014/04/28 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
岗位聘任报告
2015/03/02 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
Redis集群的关闭与重启操作
2021/07/07 Redis
python获取带有返回值的多线程
2022/05/02 Python