短时间内多个请求状态更新,导致react 不能及时响应问题总结
个人总结
这段时间项目中遇到这样一个问题,旧项目中增加了一个聊天对话的模块,这是其他同学负责的部分,因为要有消息提醒,所以做了个轮询。消息提示因为是页头部分,所以每个模块都会引用到。这是背景。
现象
我负责的详情页部分,因为内容比较多,所以会有3个请求发出,修改的数据内容也比较多,来改变state以改变视图。
本次也只是加了点东西而已,原本是可以正常显示。
本地mock时也没什么问题,发布至测试环境发现数据不能得到渲染。 呈现出来就是页面一片空白。
调试过程
初步判断可能是代码逻辑问题,因为该页面涉及到新建,编辑,不同类型的不同展示情况,同时有编辑之后的预览。所以逻辑比较多
renderCont(type,post,isReview) {
let cont = null
//未获得返回,不渲染
if(!contentType){
return cont
}
//条件一
if(contentType == 1){
//更多省略
cont = <div>{str && this.getContent(str)}</div>
return cont
}
// 条件二
if(type ==1){
let coverImageUrl = post.get('coverImageUrl')
//。。。
return cont
}
//条件三四
return (isReview ? <div>1</div>:<div>2</div>)
}
断点跟进去之后发现,只走了第一个,默认无数据时的null,后面数据不再变化。排除数据异常的可能性之后。
猜测是短时间数据变动太多,导致react没有及时响应,因为pc是单页应用,页头部分的更新也在改变数据。
可以看一下我们五秒内的网络请求:

本地响应比较及时,没什么大的影响。测试环境上就发现断点进入到react判断是否更新的方法时,可以发现
- props 里element已经是填充了数据的dom对象,而更新判断认为没有改变。这个原因只能去猜测是同时更新太多状态没有得到及时响应。
具体原因,这里先占个坑,研究一下react更新机制再说
具体解决,也没什么好办法,既然同时更新导致,那就进行函数截流,
即轮询请求成功之后,使用setTimeout延时更新数据,这样是可以接受的,消息提示晚一点渲染也是没影响的。
短时间内多个请求状态更新,导致react 不能及时响应问题总结的更多相关文章
- React报错之无法在未挂载的组件上执行React状态更新
正文从这开始~ 总览 为了解决"Warning: Can't perform a React state update on an unmounted component" ,可以 ...
- HttpWebResponse请求状态代码
HttpWebResponse请求状态代码标识 成员名称 说明 Continue 等效于 HTTP 状态 100.Continue指示客户端可能继续其请求. SwitchingProtocols 等效 ...
- Asp.Net保存session的三种方法 (Dll文件更新导致session丢失的解决办法)
1. InProc模式(默认值):asp.net将session保存到当前进程中,这种方式最快,但是不能多台服务器共享session,且会话状态数据容易丢失. <sessionState mod ...
- STMS传输队列中的请求状态一直是Running不能结束
通过STMS传输请求时,遇到了如下问题: STMS传输请求,不论等多久的时间,请求状态一直是running,不能结束.但检查传输的内容时,发现CHANGE REQUEST包含的内容已经传输到目标Cli ...
- Java问题记录——循环里的二次判断与状态更新
Java问题记录——循环里的二次判断与状态更新 摘要:本文主要记录了在循环操作时可能出现的问题. 问题重现 在使用循环结构时,如果使用了定时任务,或者代码会多次调用循环结构,可能会导致有些对象会被循环 ...
- nginx实时记录请求状态信息( ngx_realtime_request_module)
cd /usr/local/src/ wget "http://nginx.org/download/nginx-1.4.2.tar.gz" tar -xzvf nginx.tar ...
- HTTP请求状态类
<?php /** * 常用常量文件 * */ /** * HTTP协议请求状态 */ class HttpRequest { //100类 ----用于指定客户端应相应的某些动作---- co ...
- nginx流量带宽等请求状态统计( ngx_req_status)
介绍 ngx_req_status用来展示nginx请求状态信息,类似于apache的status,nginx自带的模块只能显示连接数等等信息,我们并不能知道到底有哪些请求.以及各url域名所消耗的带 ...
- Nginx 流量带宽等请求状态统计( ngx_req_status)
Nginx 流量带宽等请求状态统计 ( ngx_req_status) 插件下载地址: wget http://nginx.org/download/nginx-1.4.2.tar.gz git c ...
随机推荐
- HTML中的超链接
超链接:也叫URL(Uniform Resource Locator),就是统一资源定位器.一般效果是我们点击网页上某个地方,网页会自动跳转到另外一个地方. 一般链接遵循以下要求:scheme://h ...
- ubuntu12.04 安装中文输入法
1. 安装输入法的第一步,是安装语言包.我们选择System Settings-->Language Support-->Install/Remove Languages 选择中文 2. ...
- Robot Framework学习笔记(三)------常用关键字介绍
下面关键字全部由 Builtin 库提供,Builtin 为 Robot Framework 标准类库.Builtin库提供常用的关键字 1.log log 关键字就是编程语言里的"prin ...
- CSS Content 属性
content 属性,用在after,before伪元素上,用于在选中的元素前后插入内容. 插入的内容多种多样, 纯文字 h1::after{ content:"h1后插入内容" ...
- Macbook下安装管理MySQL
下载安装MySQL 1.访问MySQL官网:http://dev.mysql.com/downloads/ 2.下载 MySQL Community Server: 3.Select Platform ...
- Hadoop 新生报道(四) WordCount
WordCount是hadoop里hello word级的第一个程序,作为一个萌新,我也来跑一跑这个,附带针对新人的说明. 所谓WordCount,就是统计一个或几个文档中相同的单 ...
- Canvas-图片旋转
Canvas-图片旋转 众所周知canvas是位图,你可以在里面渲染你要的东西,不过你只能操作canvas的属性来进行编辑.就是说你并不能操作画进canvas的东西,例如我在canvas里添加一幅画, ...
- Linux磁盘分区/格式化/挂载(树莓派3挂载硬盘)
[前言] 本文将要讲解的功能为Linux环境下对磁盘进行操作.包括分区.格式化.挂载外接移动存储设备等. 该文的写作背景为本人的树莓派需要外接一个固态硬盘作为存储设备,因此,便开始了一系列的折腾. [ ...
- [译]what is bootstrap
Question:Bootstrap的定义?有什么用?如何助力前端开发? Answers: 它是一个在用HTML,CSS和javascript创建网站和网页应用的时候可以用到的基础内容. More ...
- [译]Why do people write #!/usr/bin/env python on the first line of a Python script?
If you have several versions of Python installed, /usr/bin/env will ensure the interpreter used is t ...