详解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 相关文章推荐
15款优秀的jQuery导航菜单插件分享
Jul 19 Javascript
jquery批量设置属性readonly和disabled的方法
Jan 24 Javascript
JS实现div居中示例
Apr 17 Javascript
一个JavaScript函数把URL参数解析成Json对象
Sep 24 Javascript
jQuery 和 CSS 的文本特效插件集锦
Dec 12 Javascript
基于JavaScript实现TAB标签效果
Jan 12 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
Jan 27 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
Mar 16 Javascript
微信小程序 wx.uploadFile无法上传解决办法
Dec 14 Javascript
微信小程序-获得用户输入内容
Feb 13 Javascript
jquery-file-upload 文件上传带进度条效果
Nov 21 jQuery
vue回到顶部监听滚动事件详解
Aug 02 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
探讨fckeditor在Php中的配置详解
2013/06/08 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
javascript实现计算器功能
2020/03/30 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
Python socket 套接字实现通信详解
2019/08/27 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
使用Python构造hive insert语句说明
2020/06/06 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
自我评价格式
2014/01/06 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
高三毕业感言
2015/07/30 职场文书
MySQL中连接查询和子查询的问题
2021/09/04 MySQL