当前位置: 首页 > news >正文

react.js 生命周期componentDidUpdate的另类用法:防止页面过渡刷新

场景:数据新增成功之后,需要返回原来的查询表,这时候的查询,需要使用react的生命周期:componentDidUpdate

componentDidUpdate() 这个生命周期的作用是当props或state更新之后,使用它更新DOM节点。如果使用不当,则查询页面会不停的调用查询的方法,不停的执行刷新操作。因此,需要给新增的方法增加一个标志,通过这个标志,判断,如果新增成功,则调用一次查询方法,否则,则不调用。

这个标志,通常在 2 个位置使用:

1. action的 新增 方法中;
2. 查询组件的 this.state 与 componentDidUpdate() 中;

这两个标志,分别是:
addGroupResponseFlag                  //新增成功的标志
addResponseFlagHas:false           //新增成功后是否更新标志,默认为false

 

下面代码展示:

//action 方法,在return前使用
let addGroupResponseFlag = httpUtils.httpResponseFlag(params); return{ type: ADD_VERSION_GROUP, data: { params, //新增成功标志 addGroupResponseFlag } }
//查询组件
constructor(props){
    super(props);
    this.state = {
  //新增完成之后是否更新标志,默认false
    addResponseFlagHas:false
    }

//页面更新数据之后需要调用这个生命周期componentDidUpdate
componentDidUpdate(){
  /**
  * 给获取数据的方法传参数,分页
  */
  let pageSize = this.state.pageSize;
  let pageNum = this.state.pageNum;
  /**
  * 这里使用的是ES6的对象解构赋值,api接收参数只有一个变量,这里的赋值,只是值{pageNum , pageSize},传的对象的值
  */
  let addGroupResponseFlag = this.props.versionGroupState.addGroupResponseFlag;
  let addResponseFlagHas = this.state.addResponseFlagHas;

  if(addGroupResponseFlag && !addResponseFlagHas){
      this.setState({
         addResponseFlagHas: true
  });

  /**
  * addGroupResponseFlag && !addResponseFlagHas 为 true 时,执行重新查询方法
  */
  this.props.searchAppVersionGroup({pageNum , pageSize});
  }

  /**
  * 如果有删除 或 修改 依次把判断方法写在下面
  */
}

 

如果有更好的方法,欢迎交流!

 

转载于:https://www.cnblogs.com/baiyygynui/p/5956072.html

相关文章:

  • JS内置对象
  • python简单粗暴多进程之concurrent.futures
  • 因果图法
  • css3的box-sizing
  • 关于css的hack问题
  • QT QT练习一
  • linux常用20命令 --转载
  • 判断元素是否存在
  • Android 异步查询框架AsyncQueryHandler的使用
  • get值乱码(gbk编码浏览器造成)
  • Spring:动态代理
  • 解决“添加远程依赖方式没有效果”的bug
  • z-index用法总结
  • redis-在乌班图下设置自动启动
  • Python成长笔记 - 基础篇 (十一)----RabbitMQ、Redis 、线程queue
  • JS基础之数据类型、对象、原型、原型链、继承
  • js写一个简单的选项卡
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • PhantomJS 安装
  • redis学习笔记(三):列表、集合、有序集合
  • SQLServer之创建显式事务
  • Vue组件定义
  • Webpack入门之遇到的那些坑,系列示例Demo
  • win10下安装mysql5.7
  • Xmanager 远程桌面 CentOS 7
  • 从PHP迁移至Golang - 基础篇
  • 从setTimeout-setInterval看JS线程
  • ------- 计算机网络基础
  • 聚类分析——Kmeans
  • 使用putty远程连接linux
  • 数组的操作
  • 移动端唤起键盘时取消position:fixed定位
  • 终端用户监控:真实用户监控还是模拟监控?
  • #NOIP 2014#Day.2 T3 解方程
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (转)LINQ之路
  • (转)shell调试方法
  • .libPaths()设置包加载目录
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .Net 代码性能 - (1)
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • @ConfigurationProperties注解对数据的自动封装
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [Android]一个简单使用Handler做Timer的例子
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [C#][DevPress]事件委托的使用
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [C++]类和对象【下】
  • [DP 训练] Longest Run on a Snowboard, UVa 10285
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效