React-Hooks——useMemo的使用场景

259 阅读2分钟

image.png

useMemo

useMemo 为了性能优化存在的一个hook,把创建的函数和依赖项数组作为参数,它仅仅会在依赖项发生改变的时候,重新计算第一个参数的值,依赖不变时返回的值相同

语法 useMemo(()=>{.......},[])

接收两个参数:

1.第一个是函数,这个函数的返回值作为useMemo的返回值

2.第二个是数组,这个数组是依赖值,只有当数组里面的值改变了,才会重新计算

基础使用代码:

const countMemo=useMemo(()=>{
 .....处理相关逻辑
 return 返回值
},[count])

使用案例讲解

场景描述: 一个计算器,点击按钮+1,计算出总数之和。同时页面上还有其他元素显隐改变

1. 不使用useMemo时

import { useMemo, useState } from 'react'
function CaclNum(count: number) {
  console.log('重新渲染')
  let total = 0
  for (let i = 0; i <= count; i++) {total += i }
  return total
}

const Hook = () => {
  const [count, setCount] = useState(0)
  const [show, setShow] = useState(true)

 const total = CaclNum(count)

  return (
    <>
      <p>计算数字之和{total}</p>
      <button onClick={(e) => setCount(count + 1)}>点击+1</button>
      <button onClick={(e) => setShow(!show)}>切换</button>
    </>
  )
}
export default Hook

问题:show,count改变都会打印重新渲染,都会重新执行,重新计算 如果是计算量大的,就会直接体现出来界面的呈现就会出现卡顿的效果

1. 使用useMemo,进行优化

import { useMemo, useState } from 'react'
function CaclNum(count: number) {
  console.log('重新渲染')
  let total = 0
  for (let i = 0; i <= count; i++) {total += i }
  return total
}


const Hook = () => {
  const [count, setCount] = useState(0)
  const [show, setShow] = useState(true)

  /** 使用usememo优化后,show变化不会造成count改变 打印重新渲染 */
  const total = useMemo(() => {
    return CaclNum(count)
  }, [count])


  return (
    <>
      <p>计算数字之和{total}</p>
      <button onClick={(e) => setCount(count + 1)}>点击+1</button>
      <button onClick={(e) => setShow(!show)}>切换</button>
    </>
  )
}
export default Hook

结果:只有count改变时,才会重新计算, show改变时不会重新计算

小结

useMemo与vue中的计算属性一样,都会将复杂的计算进行缓存

结束语

希望大家能够喜欢我的文章,我真的很用心在写,也希望通过文章认识更多志同道合的朋友。

最后伙伴们,如果喜欢我的可以给点一个小小的赞👍或者关注➕都是对我最大的支持。