• React Hooks系列之useMemo


    useMemo介绍

    useMemo用于性能优化,通过记忆值来避免在每个渲染上执行高开销的计算。

    const memoizedValue = useMemo(callbanck, array)
    

    返回一个memoized 值

    • callback是一个函数用于处理逻辑
    • array 控制 useMemo 重新执行的数组,array 改变时才会 重新执行useMemo
    1. 不传数组,每次更新都会重新计算
    2. 空数组,只会计算一次
    3. 依赖对应的值,当对应的值发生变化时,才会重新计算(可以依赖另外一个 useMemo 返回的值)
    • useMemo 的返回值是一个记忆值,是 callback 的返回值

    把 创建函数 和 依赖项数组作为参数传入 useMemo,它仅会在某个依赖项改变时才重新计算memoized 值。这种优化有助于避免在每次渲染时都进行高开销的计算。

    记住,传入 useMemo 的函数会在渲染期间执行 (切记不是渲染后执行)。请不要在这个函数内部执行与渲染无关的操作,诸如副作用之类的操作属于useEffect 的适用范畴,而不是useMemo。

    潜台词就是不能在useMemo 里面写副作用逻辑处理,副作用的逻辑处理放在 useEffect 内进行处理。在我的印象中和 Vue 的computed 计算属性类似。都是根据依赖的值计算出结果,当依赖的值未发生变化的时候,不触发状态改变。适用于复杂的计算场景,例如复杂的列表渲染,对象深拷贝等场景

    如果没有提供依赖项数组,useMemo 在每次渲染时都会计算新的值

    你可以把 useMemo 作为性能优化的手段,但不要把它当成语义上的保证。将来,React 可能会选择“遗忘”以前的一些 memoized 值,并在下次渲染时重新计算他们,比如为离屏组件释放内存。先编写在没有 useMemo 的情况下也可以执行的代码 ——之后再在你的代码中添加 useMemo, 以达到优化性能的目的

    useMemo用法

    例子:

    function App () {
      const [ count, setCount ] = useState(0)
      const add = useMemo(() => count + 1, [count])
      return (
        <div>
          点击次数: { count }
          <br/>
          次数加一: { add }
          <button onClick={() => { setCount(count + 1)}}>点我</button>
        </div>
        )
    }
    
  • 相关阅读:
    Java 学习使用常见的开源连接池
    Java 数据库操作
    Java 集合的简单理解
    windows中在vs code终端使用bash
    敏捷开发、DevOps相关书籍——书单
    使用Dockerfile来构建镜像
    Redis集群搭建
    使用redis限制ip访问次数
    NFS服务器搭建
    ssh 中 远程文件传输
  • 原文地址:https://www.cnblogs.com/tommymarc/p/16160366.html
Copyright © 2020-2023  润新知