详解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 相关文章推荐
use jscript Create a SQL Server database
Jun 16 Javascript
js自定义事件代码说明
Jan 31 Javascript
jQuery 选择器项目实例分析及实现代码
Dec 28 Javascript
单击和双击事件的冲突处理示例代码
Apr 03 Javascript
jQuery结合CSS制作动态的下拉菜单
Oct 27 Javascript
基于jquery实现日历签到功能
Sep 11 Javascript
jQueryUI Datepicker组件设置日期高亮
Oct 13 Javascript
详解Angular6 热加载配置方案
Aug 18 Javascript
VueJS 取得 URL 参数值的方法
Jul 19 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
Aug 26 Javascript
6种JavaScript继承方式及优缺点(小结)
Feb 06 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
Oct 22 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乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
php制作动态随机验证码
2015/02/12 PHP
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
Python函数中定义参数的四种方式
2014/11/30 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
python之super的使用小结
2018/08/13 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
采购求职信
2014/03/17 职场文书
委托书范本
2014/04/02 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
python实现剪贴板的操作
2021/07/01 Python
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS