react 之 UseMemo

useMemo

在这里插入图片描述
在这里插入图片描述

看个场景

下面我们的本来的用意是想基于count的变化计算斐波那契数列之和,但是当我们修改num状态的时候,斐波那契求和函数也会被执行,显然是一种浪费

// useMemo
// 作用:在组件渲染时缓存计算的结果

import { useState } from 'react'

function factorialOf(n) {
  console.log('斐波那契函数执行了')
  return n <= 0 ? 1 : n * factorialOf(n - 1)
}

function App() {
  const [count, setCount] = useState(0)
  // 计算斐波那契之和
  const sumByCount = factorialOf(count)

  const [num, setNum] = useState(0)

  return (
    <>
      {sum}
      <button onClick={() => setCount(count + 1)}>+count:{count}</button>
      <button onClick={() => setNum(num + 1)}>+num:{num}</button>
    </>
  )
}

export default App

useMemo缓存计算结果

思路: 只有count发生变化时才重新进行计算

import { useMemo, useState } from 'react'

function fib (n) {
  console.log('计算函数执行了')
  if (n < 3) return 1
  return fib(n - 2) + fib(n - 1)
}

function App() {
  const [count, setCount] = useState(0)
  // 计算斐波那契之和
  // const sum = fib(count)
  // 通过useMemo缓存计算结果,只有count发生变化时才重新计算
  const sum = useMemo(() => {
    return fib(count)
  }, [count])

  const [num, setNum] = useState(0)

  return (
    <>
      {sum}
      <button onClick={() => setCount(count + 1)}>+count:{count}</button>
      <button onClick={() => setNum(num + 1)}>+num:{num}</button>
    </>
  )
}

export default App

相关推荐

  1. React useMemo Hook (九)

    2024-02-02 18:30:02       31 阅读
  2. react hooks学习useMemo和useCallback

    2024-02-02 18:30:02       62 阅读
  3. react useMemo的使用

    2024-02-02 18:30:02       54 阅读
  4. react hooks 的useMemo

    2024-02-02 18:30:02       50 阅读
  5. react hook:useMemo

    2024-02-02 18:30:02       44 阅读
  6. UseMemo、UseCallback、React.memo

    2024-02-02 18:30:02       26 阅读
  7. React中的useMemo钩子

    2024-02-02 18:30:02       57 阅读
  8. React@16.x(28)useMemo

    2024-02-02 18:30:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 18:30:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 18:30:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 18:30:02       87 阅读
  4. Python语言-面向对象

    2024-02-02 18:30:02       96 阅读

热门阅读

  1. vue 深度作用选择器 >>>、/deep/、::v-deep

    2024-02-02 18:30:02       48 阅读
  2. Redis简介和数据类型

    2024-02-02 18:30:02       63 阅读
  3. MYSQL Case When搜索查询

    2024-02-02 18:30:02       51 阅读
  4. Android创建服务和发送邮件

    2024-02-02 18:30:02       44 阅读
  5. 一文详解RTSP协议:流媒体传输控制协议

    2024-02-02 18:30:02       56 阅读
  6. 正则group分组提取关键信息

    2024-02-02 18:30:02       51 阅读
  7. 什么是线程安全,你了解吗?

    2024-02-02 18:30:02       60 阅读
  8. Spring全局异常处理

    2024-02-02 18:30:02       61 阅读
  9. 洛谷P2670扫雷游戏

    2024-02-02 18:30:02       58 阅读
  10. 数据可视化:让数据“活”起来

    2024-02-02 18:30:02       53 阅读
  11. 用 Footprint 的交易类型标签揭秘链上交易

    2024-02-02 18:30:02       50 阅读