关于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 实现键盘上下左右功能的小例子
Sep 15 Javascript
深入浅析同源策略和跨域访问
Nov 26 Javascript
基于jPlayer三分屏的制作方法
Dec 21 Javascript
jQuery点击导航栏选中更换样式的实现代码
Jan 23 Javascript
Node.js中的require.resolve方法使用简介
Apr 23 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 jQuery
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 jQuery
javascript中new Array()和var arr=[]用法区别
Dec 01 Javascript
JS实现的简单下拉框联动功能示例
May 11 Javascript
vue中使用element组件时事件想要传递其他参数的问题
Sep 18 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
Sep 24 Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 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
php自定义session示例分享
2014/04/22 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
php 实现进制相互转换
2016/04/07 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
jquery实现图片翻页效果
2013/12/23 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
JavaScript 禁止用户保存图片的实现代码
2020/04/28 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
Python中多线程thread与threading的实现方法
2014/08/18 Python
详解Django通用视图中的函数包装
2015/07/21 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python实现整数的二进制循环移位
2019/03/08 Python
使用Python3内置文档高效学习以及官方中文文档
2019/05/19 Python
详解python中*号的用法
2019/10/21 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
python 5个顶级异步框架推荐
2020/09/09 Python
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
实习自我评价怎么写
2013/12/02 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python