React-router4路由监听的实现


Posted in Javascript onAugust 07, 2018

React-router 4

React Router4是一个纯React重写的包,现在的版本中已不需要路由配置,一切皆组件。

问题出发点

最近在一个新的H5项目中使用了react router 4 ("react-router-dom": "^4.2.2"),项目中的一部分页面是需要给app客户端的同学使用,这样H5项目中的title就不能一成不变,需要显示对应页面的title,所以,我们就需要去监听路由变动来更改title。

思路

在react中,例如:在父路由中有两个子路由,两个子路由组件的内容都属于父路由中的一部分,通过切换子路由来显示不同内容,这种情况下,父组件中的生命周期函数componentWillUpdate都会在切换子路由时被触发。按照这个思路结合react-router 4一切皆组件的特性,我们可以用一个IndexPage组件来放置所有的一级路由(其他多级路由就可以放到对应一级路由组件中),当我们切换路由是,就可以在这个IndexPage组件中实时监听路由的变动了。

项目目录结构

React-router4路由监听的实现

src/app.js

...
export default class App extends Component {
  render() {
    return (
      <Router>
        <Route path="/" component={IndexPage}/>
      </Router>
    )
  }
}

src/pages/index.js

...
export default class IndexPage extends Component {
  componentDidMount() {
    this.updateTitle(this.props);
  }

  componentWillUpdate(nextProps) {
    this.updateTitle(nextProps);
  }

  updateTitle = (props) => {
    routes.forEach(route => {
        if (route.path === props.location.pathname) {
          document.title = route.title;
        }
    })
  }
  render() {
    return (
      <div className="index-page">
        <Switch>
          ...
          项目一级路由
          ...
        </Switch>
      </div>
    )
  }
}

在这个组件中,当路由变动,我们都能实时监听,获取路由来改变title

总结

利用react-router 4一切皆组件的特性和生命周期函数来监听路由变动

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ext读取两种结构的xml的代码
Nov 05 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
Jan 07 Javascript
JQuery实现表格动态增加行并对新行添加事件
Jul 30 Javascript
了不起的node.js读书笔记之node.js中的特性
Dec 22 Javascript
jQuery异步获取json数据方法汇总
Dec 22 Javascript
jquery插件EasyUI中form表单提交实例分享
Jan 11 Javascript
详解AngularJS如何实现跨域请求
Aug 22 Javascript
微信小程序 教程之引用
Oct 18 Javascript
完美实现js选项卡切换效果(二)
Mar 08 Javascript
在Js页面通过POST传递参数跳转到新页面详解
Aug 25 Javascript
vue.js删除列表中的一行
Jun 30 Javascript
详谈vue中router-link和传统a链接的区别
Jul 22 Javascript
JavaScript设计模式之职责链模式应用示例
Aug 07 #Javascript
JavaScript使用享元模式实现文件上传优化操作示例
Aug 07 #Javascript
JavaScript设计模式之模板方法模式原理与用法示例
Aug 07 #Javascript
opencv 识别微信登录验证滑动块位置
Aug 07 #Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
Aug 07 #Javascript
深入浅析var,let,const的异同点
Aug 07 #Javascript
springMvc 前端用json的方式向后台传递对象数组方法
Aug 07 #Javascript
You might like
第八节--访问方式
2006/11/16 PHP
PHP 输出缓存详解
2009/06/20 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
python实现的文件夹清理程序分享
2014/11/22 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
Python 读取位于包中的数据文件
2020/08/07 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
介绍一下JNDI的基本概念
2013/07/26 面试题
公司领导推荐信
2013/11/12 职场文书
师范生个人推荐信
2013/11/29 职场文书
高中物理教学反思
2014/02/08 职场文书
《童年》教学反思
2014/02/18 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书