详解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 相关文章推荐
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
JavaScript Distilled 基础知识与函数
Apr 07 Javascript
actionscript与javascript的区别
May 25 Javascript
原生javascript兼容性测试实例
Jul 01 Javascript
jQuery中ready事件用法实例
Jan 19 Javascript
日常收集整理的JavaScript常用函数方法
Dec 10 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
Sep 14 Javascript
AngularJS中的JSONP实例解析
Dec 01 Javascript
jQuery中页面返回顶部的方法总结
Dec 30 Javascript
原生JS实现圣旨卷轴展开效果
Mar 06 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
Sep 10 Javascript
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
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解答方法
2012/02/04 PHP
PHP使用数组实现队列
2012/02/05 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
详解Django CAS 解决方案
2019/10/30 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
面试求职的个人自我评价
2013/11/16 职场文书
大学生职业规划前言模板
2013/12/27 职场文书
IT工程师岗位职责
2014/07/04 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫