欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

React常用hook的优化useEffect浅比较

程序员文章站 2022-06-22 09:13:18
先说说react原版的useEffect使用起来不便的地方 useEffect( function() { // effect操作 }, ['a', 'b', { name: 'c' }] ); 这里的effect每次更新都会执行,因为第三个参数一直是不等的,{name: 'c'} !== {nam ......

先说说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);