问 题

// route.js

class NewsList extends Component {

componentWillMount () {

const type = this.props.location.pathname.replace('/', '') || 'top'

this.props.dispatch(fetchListData(type))

}

render () {

...

}

}

react: v15.6.1

react-router: v4.1.1

部分代码如上,现在的问题是切换路由时,组件并不会重新渲染。请问如何解决?

解决方案

为什么需要重新渲染组件?实质上,你想要的只是当路由变化,请求对应路由的数据而已。

那么考虑一下React组件的生命周期钩子。第一次加载时:

"constructor"

"componentWillMount"

"render"

"componentDidMount"

当组件的props发生改变时,组件更新,会调用如下的生命周期钩子

"componentWillReceiveProps"

"shouldComponentUpdate"

"componentWillUpdate"

"render"

"componentDidUpdate"

当路由变化时,即组件的props发生了变化,会调用componentWillReceiveProps等生命周期钩子

那我们所需要做的只是: 当路由改变时,根据路由,也去请求一下数据就OK了,于是乎:

class NewsList extends Component {

componentDidMount () {

this.fetchData(this.props.location);

}

fetchData(location) {

const type = location.pathname.replace('/', '') || 'top'

this.props.dispatch(fetchListData(type))

}

componentWillReceiveProps(nextProps) {

if (nextProps.location.pathname != this.props.location.pathname) {

this.fetchData(nextProps.location);

}

}

render () {

...

}

}

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

react 动态修改路由_react.js - React 如何监听路由变化重新渲染组件相关推荐

  1. js给php注册网页添加实时监听,js 实现watch监听数据变化的代码

    1.js /** * @desc 属性改变监听,属性被set时出发watch的方法,类似vue的watch * @author Jason * @study https://www.jianshu.c ...

  2. React Hook 监听路由切换实时同步渲染页面功能

    场景 对于全局共用的顶部,需要在不同的路由状态下显示不同的信息.而一般情况下顶部通栏都是公共组件,一次引入各个页面通用.所以需要监听路由变化,实时渲染页面功能. // App.tsx export d ...

  3. React Native - Keyboard API使用详解(监听处理键盘事件)

    参考: React Native - Keyboard API使用详解(监听处理键盘事件) 当我们点击输入框时,手机的软键盘会自动弹出,以便用户进行输入. 但有时我们想在键盘弹出时对页面布局做个调整, ...

  4. Vue动态路由传参和监听路由

    Vue动态路由传参 query传参 params传参 //定义Detail路由 {path: '/detail/:id',name: 'Detail'component: () => impor ...

  5. reactrouter监听路由变化_一篇文章搞懂前端路由原理解析和实现方式

    在单页应用如此流行的今天,曾经令人惊叹的前端路由已经成为各大框架的基础标配,每个框架都提供了强大的路由功能,导致路由实现变的复杂. 想要搞懂路由内部实现还是有些困难的,但是如果只想了解路由实现基本原理 ...

  6. Vue--Router--解决watch监听路由无效的问题

    原文网址:Vue--Router--解决watch监听路由无效的问题_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用实例介绍如何解决watch监听路由无效的问题. 需求 有两个组件:CompA和 ...

  7. node --- 监听文件变化(静态、动态、子进程)

    静态版本:监听的文件名写死了 // watcher.js 'use strict' const fs = require('fs'); fs.watch('target.txt', () => ...

  8. Android 第十九课 大喇叭--广播机制----动态注册监听网络变化与静态注册实现开机启动

    为了便于进行 系统级别的消息通知,Android引入了一套广播消息机制. 1.广播机制简介: 因为Android中的每个应用程序都可以对自己感兴趣的广播尽心注册,这样程序只会接收自己所关心的广播内容, ...

  9. 前端路由的原生代码实现?前端如何监听路由变化?

    前端如何监听路由的变化?如何根据前端路由的变化,去操作相应的DOM? 本文从前端层面上,大致解读一下,前端路由的监听与相关DOM操作的方法. 实现的基本原理: 首先,放置指定的DOM标识, 其次,当锚 ...

最新文章

  1. p20华为云电脑白屏_永别了电脑,华为大举动:华为云电脑,重新定义个人电脑...
  2. MIT研究发现:十大最常用数据集标签错误率达3.4%
  3. SpreadJS 类Excel表格控件 - V12 新特性详解
  4. HTML5----简易贪吃蛇小游戏
  5. 所有程序自适应高分辨率(未完善)
  6. Add-in Express for Office and .NET v7.3支持VS 2013预览
  7. ELK+kafka日志系统搭建-实战
  8. 关得紧紧的 FreeEIM飞鸽传书
  9. linux下配置squid 服务器,最简单使用方式
  10. @Value注入static属性
  11. 航班可售舱位及机票价格查询api实例
  12. 什么是软件测试中的探索性测试(完整指南)(三)
  13. 山东微信红包派发量全国第8
  14. citus介绍和centos7安装部署和集群搭建
  15. 解决React Navigation goBack()无效
  16. Leecode-SQL 1407. 排名靠前的旅行者
  17. 天蝎座双鱼座 之 谈情说爱
  18. 大印文化:学习说服力一定要理解换框!
  19. Notepad++ 正则规则
  20. MLX90640 红外热成像传感器测温模块开发笔记(三)

热门文章

  1. 经典语录大全的一些思考
  2. maya 多边形uv批量传递工具
  3. 元宵佳节,程序员小明被女友罚写一万遍“我爱你”,还不准用循环和递归?!
  4. 华尔街金融家告诉你,为什么有钱人都不娶美女
  5. 关于WiFi-Sensing(无线感知)的未来
  6. 《疑案里的中国史》——很多奇怪的历史故事其实都有合理的逻辑支撑
  7. 压延成型(片材、薄膜)
  8. 复盘的小小帮手——简单编程,进阶范例 通达信基础范例
  9. 最好用的剧情插件:USequencer初识
  10. 软件工程导论——详解白盒测试和黑盒测试中的各种方法