zoukankan      html  css  js  c++  java
  • React常用hook的优化useEffect浅比较

    先说说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);
  • 相关阅读:
    Pyhont 高阶函数
    Python 函数式编程
    Python 递归函数
    Python 函数的参数定义
    Lniux学习-AWK使用
    Windows10 下 VirtualBox6 中 Centos8 无法安装"增强功能"
    Linux学习-Shell-系统启动过程与执行方式
    接口测试-工具介绍
    Linux学习-Sed 命令
    Linux学习-命令行参数、函数
  • 原文地址:https://www.cnblogs.com/wanqingying/p/12580285.html
Copyright © 2011-2022 走看看