useMemo的使用方式

下面我们通过一个实例,来理解下 useMemo的用法。

父组件

function App() {
  const [name, setName] = useState('名称')
  const [content,setContent] = useState('内容')
  return (
      <>
        <button onClick={() => setName(new Date().getTime())}>name</button>
        <button onClick={() => setContent(new Date().getTime())}>content</button>
        <Button name={name}>{content}</Button>
      </>
  )
}

子组件

function Button({ name, children }) {
  function changeName(name) {
    console.log('11')
    return name + '改变name的方法'
  }

  const otherName =  changeName(name)
  return (
      <>
        <div>{otherName}</div>
        <div>{children}</div>
      </>

  )
}

熟悉react的同学可以很显然的看出,当我们点击父组件的按钮的时候,子组件的name和children都会发生变化。

注意我们打印console.log的方法。
不管我们是改变name或者content的值,我们发现 changeName的方法都会被调用。
是不是意味着 我们本来只想修改content的值,但是由于name并没有发生变化,所以无需执行对应的changeName方法。但是发现他却执行了。 这是不是就意味着性能的损耗,做了无用功。

下面我们使用useMemo进行优化

优化之后的子组件
function Button({ name, children }) {
  function changeName(name) {
    console.log('11')
    return name + '改变name的方法'
  }

const otherName =  useMemo(()=>changeName(name),[name])
  return (
      <>
        <div>{otherName}</div>
        <div>{children}</div>
      </>

  )
}

export default Button
这个时候我们点击 改变content值的按钮,发现changeName 并没有被调用。
但是点击改变name值按钮的时候,changeName被调用了。我们可以使用useMemo方法 避免无用方法的调用,当然一般我们changName里面可能会使用useState来改变state的值,那是不是就避免了组件的二次渲染。达到了优化性能的目的

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你在使用React时,你可能会经常遇到需要优化组件性能的情况。React.memo和useMemo都是React提供的两种优化性能的方式。 React.memo是一个高阶组件(Higher Order Component),它可以优化组件的性能,使得组件只有在它的props发生改变时才会重新渲染。这种优化是通过比较前一次和当前props的浅层比较来实现的。使用React.memo时,需要将组件作为React.memo函数的参数传递,例如: ``` import React from 'react'; const MyComponent = React.memo(props => { // 组件代码 }); export default MyComponent; ``` useMemo是一个React的hook函数,它可以缓存组件中的一些计算结果,以避免重复计算。useMemo接收两个参数:一个计算函数和一个依赖数组。当依赖数组中的任何一个值发生改变时,useMemo会重新计算并返回新的值。如果依赖数组中的任何一个值都没有发生改变,则会返回上一次缓存的值。使用useMemo时,需要将计算函数作为useMemo的第一个参数传递,依赖数组作为第二个参数传递,例如: ``` import React, { useMemo } from 'react'; const MyComponent = props => { const expensiveCalculation = useMemo(() => { // 计算代码 }, [props.dependency]); // 组件代码 }; export default MyComponent; ``` 需要注意的是,React.memo和useMemo都只是对组件性能进行优化的工具,并不是适用于所有情况的万能解决方案。在使用它们时,需要谨慎考虑依赖项和是否真的需要进行性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值