详解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 相关文章推荐
用JQuery 实现的自定义对话框
Mar 24 Javascript
Code: write(s,d) 输出连续字符串
Aug 19 Javascript
javascript中使用css需要注意的地方小结
Sep 01 Javascript
js运动框架_包括图片的淡入淡出效果
May 11 Javascript
jquery提取元素里的纯文本不包含span等里的内容
Sep 30 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
Jan 23 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
Oct 17 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
Jan 23 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
Jul 13 Javascript
ES2020 已定稿,真实场景案例分析
May 25 Javascript
Vue 样式切换及三元判断样式关联操作
Aug 09 Javascript
js利用iframe实现选项卡效果
Aug 09 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
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
简单谈谈favicon
2015/06/10 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
Python自动登录126邮箱的方法
2015/07/10 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
Python中的集合介绍
2019/01/28 Python
HTML的form表单和django的form表单
2019/07/25 Python
Python插件机制实现详解
2020/05/04 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
用友笔试题目
2016/10/25 面试题
工程师自我评价怎么写
2013/09/19 职场文书
班长演讲稿范文
2014/04/24 职场文书
质量保证书
2015/01/17 职场文书
计划生育责任书
2015/05/09 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
python脚本框架webpy的url映射详解
2021/11/20 Python