基于OpenLayers的WebGIS程序二次开发实例教程
35546 人在学
React起源于Facebook的内部项目,因为该公司对市场上所有Javascript MVC框架,都不满意,就决定自己写一套,用来架设Instagram的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。
先说说react原版的useEffect使用起来不便的地方
useEffect(
function(){
//effect操作
},
['a','b',{name:'c'}]
);
这里的effect每次更新都会执行,因为第三个参数一直是不等的,{name:'c'}!=={name:'c'}
第二是在dePS依赖很多的时候是真的麻烦
下面贴出改进版useEffect
import{useRef,useEffect}from'react';
import_from'lodash';
exportfunctionuseDeepCompareEffect<T>(fn,deps:T){
//使用一个数字信号控制是否渲染,简化react的计算,也便于调试
letrenderRef=useRef<number|any>(0);
letdepsRef=useRef<T>(deps);
if(!_.isEqual(deps,depsRef.current)){
renderRef.current++;
}
depsRef.current=deps;
returnuseEffect(fn,[renderRef.current]);
}
在使用的时候什么都不用做,只需要把参数传进来就行。
避免了之前的浅比较的缺陷,性能上有降低
deps稍微控制一下量,此处的性能不是大问题
写起来爽就完事了,要啥自行车。
useDeepCompareEffect(function(){
//effect操作
},'a');
useDeepCompareEffect(
function(){
//effect操作
},
{name:'c'}
);
useDeepCompareEffect(function(){
//effect操作
},4567);
由于React的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单。所以,越来越多的人开始关注和使用,认为它可能是将来Web开发的主流工具。