详解React-Router中Url参数改变页面不刷新的解决办法


Posted in Javascript onMay 08, 2018

问题

今天在写页面的时候发现一个问题,就是在React Router中使用了Url传参的功能,像这样:

export class MainRouter extends React.Component {
  render() {
    return (
      <BrowserRouter>
        <Switch>
          ...
          <Route exact path={'/channel/:channelId'} component={ChannelPerPage}/>
          ...
        </Switch>
      </BrowserRouter>
    );
  }
}

按照官方文档的说法,可以在ChannelPerPage这个组件中使用

this.props.match.params

来获取url参数的值,但是我发现如果你在这个url下只将url中的参数部分改变,比如channelId从1变成2的时候,页面并不会刷新。

解决办法

查阅资料后发现这样的根本原因是props的改变并不会引起组件的重新渲染,只有state的变化才会引起组件的重新渲染,而url参数属于props,故改变url参数并不会引起组件的重新渲染。

后来发现React的组件中有一个可复写的方法

componentWillReceiveProps(nextProps) {
 ...
}

这个方法可以在React组件中被复写,这个方法将会在props改变的时候被调用,所以你可以使用这个方法将nextProps获取到,并且在这个方法里面修改state的内容,这样就可以让组件重新被渲染。

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

Javascript 相关文章推荐
JavaScript动态操作表格实例(添加,删除行,列及单元格)
Nov 25 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
May 07 Javascript
JavaScript中使用Math.floor()方法对数字取整
Jun 15 Javascript
JS实现自动变换的菜单效果代码
Sep 09 Javascript
jquery实现简单实用的弹出层效果代码
Oct 15 Javascript
vue2.0 中#$emit,$on的使用详解
Jun 07 Javascript
jQuery Jsonp跨域模拟搜索引擎
Jun 17 jQuery
JavaScript字符串检索字符的方法
Jun 23 Javascript
基于hover的用法实例(推荐)
Jul 04 Javascript
JS获取input[file]的值并显示在页面的实现方法
Mar 09 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
Sep 24 Javascript
KnockoutJS数组比较算法实例详解
Nov 25 Javascript
angularjs实现的购物金额计算工具示例
May 08 #Javascript
Vue微信项目按需授权登录策略实践思路详解
May 07 #Javascript
Vue + better-scroll 实现移动端字母索引导航功能
May 07 #Javascript
node使用promise替代回调函数
May 07 #Javascript
node 使用 async 控制并发的方法
May 07 #Javascript
Angular 数据请求的实现方法
May 07 #Javascript
JavaScript数组去重算法实例小结
May 07 #Javascript
You might like
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
Vue 实现简易多行滚动&quot;弹幕&quot;效果
2020/01/02 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
python编程嵌套函数实例代码
2018/02/11 Python
opencv python 基于KNN的手写体识别的实例
2018/08/03 Python
如何在Django项目中引入静态文件
2019/07/26 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
应届生会计电算化求职信
2013/10/03 职场文书
护士检查书
2014/01/17 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
我的生日感言
2015/08/03 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
nginx安装以及配置的详细过程记录
2021/09/15 Servers
Nebula Graph解决风控业务实践
2022/03/31 MySQL