详解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学习笔记6 prototype的提出
Jan 11 Javascript
jQuery焦点图切换特效插件封装实例
Aug 18 Javascript
javascript作用域问题实例分析
Jul 13 Javascript
深入解析JavaScript中的数字对象与字符串对象
Oct 21 Javascript
Javascript获取随机数的实现方法
Jun 22 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 Javascript
JS实现中国公民身份证号码有效性验证
Feb 20 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 jQuery
Vue将页面导出为图片或者PDF
Aug 17 Javascript
浅谈webpack和webpack-cli模块源码分析
Jan 19 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
Jul 28 Javascript
微信小程序自定义胶囊样式
Dec 27 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安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
2013/07/05 PHP
php银联网页支付实现方法
2015/03/04 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
vue使用showdown并实现代码区域高亮的示例代码
2019/10/17 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
用python实现面向对像的ASP程序实例
2014/11/10 Python
Python字符串处理之count()方法的使用
2015/05/18 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
python 类之间的参数传递方式
2019/12/20 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
Python中的面向接口编程示例详解
2021/01/17 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
大学毕业通用个人的求职信
2013/12/08 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
2015年女职工工作总结
2015/05/15 职场文书
行政复议答复书
2015/07/01 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
redis缓存存储Session原理机制
2021/11/20 Redis