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 相关文章推荐
jquery 最简单易用的表单验证插件
Feb 27 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
Dec 23 Javascript
解决js中window.open弹出的是上次的缓存页面问题
Dec 29 Javascript
js charAt的使用示例
Feb 18 Javascript
js获取域名的方法
Jan 27 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
基于jquery实现简单的分页控件
Mar 17 Javascript
Bootstrap页面缩小变形的快速解决办法
Feb 03 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
Jun 02 jQuery
微信小程序开发之animation循环动画实现的让云朵飘效果
Jul 14 Javascript
js事件on动态绑定数据,绑定多个事件的方法
Sep 15 Javascript
vue计算属性get和set用法示例
Feb 08 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
一个简单且很好用的php分页类
2013/10/26 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
JavaScript中string对象
2015/06/12 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
django query模块
2019/04/20 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
一套Java笔试题
2016/08/20 面试题
大学生涯自我鉴定
2014/01/16 职场文书
党员四风剖析材料
2014/08/27 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书