文森特和莱纳,qvod快播资源,邵雅茜
先说说react原版的useeffect使用起来不便的地方
useeffect( function() { // effect操作 }, ['a', 'b', { name: 'c' }] );
这里的effect每次更新都会执行,因为第三个参数一直是不等的,{name: 'c'} !== {name: 'c'}
第二是在deps依赖很多的时候是真的麻烦
下面贴出改进版useeffect
import { useref, useeffect } from 'react'; import _ from 'lodash'; export function usedeepcompareeffect<t>(fn, deps: t) { // 使用一个数字信号控制是否渲染,简化 react 的计算,也便于调试 let renderref = useref<number | any>(0); let depsref = useref<t>(deps); if (!_.isequal(deps, depsref.current)) { renderref.current++; } depsref.current = deps; return useeffect(fn, [renderref.current]); }
在使用的时候什么都不用做,只需要把参数传进来就行。
避免了之前的浅比较的缺陷,性能上有降低
deps稍微控制一下量,此处的性能不是大问题
写起来爽就完事了,要啥自行车。
usedeepcompareeffect(function() { // effect操作 }, 'a'); usedeepcompareeffect( function() { // effect操作 }, { name: 'c' } ); usedeepcompareeffect(function() { // effect操作 }, 4567);
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
JavaScript使用prototype属性实现继承操作示例
JavaScript直接调用函数与call调用的区别实例分析
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
网友评论