哎 真的蠢
昨日矩阵问题继续处理
由于自己对react不熟悉,特别是其周期函数,这里真的特别重要!
之前的代码看似没有问题,所有的功能及样式也都渲染了,但是 由于我再componmentDIdupdate周期中调用了this.setState() 方法 改变了数据,所以又会再此触发该周期函数,所以不断重复的调用,导致浏览器性能下将,而我的页面又是需长时间展示的界面,时间一长就会崩溃。
另一方面也是由于我数据来源的特殊性,我的数据是通过三个接口请求的数据(信号源,通道,连线信息),其中俩个数据(通道,连线信息)要整合成一种我需要的数据,而绘制canvas的数据和通道数据并无直接联系,就是绘制需要这个数据来确定一些位置信息,绘制完之后就不需要该信息了,而我之前一直把绘制信息存储在通道中。
解决办法:
将 数据转移到reducer中进行管理,并且新请求的数据和上一次请求的数据做判断,如果未变化,不dispatch , 那么reducer的数据就没有发生改变,componentWillReceiveProps 周期函数就不触发,如果数据不一样,就会触发该周期, 但是该周期是在组件render之前调用的 获取不到最新的dom,
因为我要拿到dom的宽高 赋值给canvas, componentDidupdate 是在render之后进行渲染的, render应该是要渲染三次,不确认,reducer中的数据也不是render一次就能拿到的。所以要通过一个state中的锁值来触发componentDidupdate函数,并且在该周期中判断所需的数据都拿到时渲染数据和绘图。这样做能极大程度的减少数据更新和canvas重绘,数据发生改变再进行数据的操作,不改变不做渲染。先挂一宿看看情况!