关于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 相关文章推荐
用 JSON 处理缓存
Apr 27 Javascript
JavaScript prototype属性使用说明
May 13 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
Mar 27 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
Jul 02 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
Apr 06 Javascript
微信小程序 两种为对象属性赋值的方式详解
Feb 23 Javascript
jQuery接受后台传递的List的实例详解
Aug 02 jQuery
Angular4学习笔记之根模块与Ng模块
Sep 09 Javascript
jQuery+CSS实现的table表格行列转置功能示例
Jan 08 jQuery
vue 使某个组件不被 keep-alive 缓存的方法
Sep 21 Javascript
微信小程序之onLaunch与onload异步问题详解
Mar 28 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
Jul 12 jQuery
简单实现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的FTP学习(四)
2006/10/09 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
PHP求最大子序列和的算法实现
2011/06/24 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
python计算文本文件行数的方法
2015/07/06 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
python字符串查找函数的用法详解
2019/07/08 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
python和php学习哪个更有发展
2020/06/17 Python
如何表示python中的相对路径
2020/07/08 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
如何定义一个可复用的服务
2014/09/30 面试题
项目计划书范文
2014/01/09 职场文书
社区庆八一活动方案
2014/02/02 职场文书
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript