解析React中useMemo与useCallback的区别

 更新时间:2022年08月17日 17:07:07   作者:小提莫~  
这篇文章主要介绍了React中useMemo与useCallback的区别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

useMemo

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

importReact, { useState, useMemo } from"react";
export default functionUseMemoPage(props) {
    const [count, setCount] =useState(0);
    constexpensive=useMemo(() => {
        console.log("compute");
        let sum=0;
        for (leti=0; i<count; i++) {
            sum+=i;
        }
        return sum;//只有count变化,这⾥里里才重新执⾏行行
      }, [count]);
    const [value, setValue] =useState("");
    return (<div><h3>UseMemoPage</h3>
    <p>expensive:{expensive}</p><p>{count}</p>            
  <button onClick={() =>setCount(count+1)}>add</button>
  <input value={value} onChange={event=>setValue(event.target.value)} /></div>  );
}           

useCallback

把内联回调函数及依赖项数组作为参数传⼊入useCallback,它将返回该回调函数的 memoized 版本,该回调函数仅在某个依赖项改变时才会更更新。当你把回调函数传递给经过优化的并使⽤用引⽤用相等性去避免⾮非必要渲染(例例如shouldComponentUpdate)的⼦子组件时,它将⾮非常有⽤用

importReact, { useState, useCallback, PureComponent } from"react";
export default function UseCallbackPage(props) {
    const [count, setCount] =useState(0);
    const addClick=useCallback(() => {
    let sum=0;
    for (leti=0; i<count; i++) {
        sum+=i;    
    }
    return sum;  
    }, [count]);
    const [value, setValue] =useState("");
    return (
    <div><h3>UseCallbackPage</h3>
  <p>{count}</p>            
  <buttononClick={() =>setCount(count+1)}>add</button>
  <inputvalue={value} onChange={event=>setValue(event.target.value)} />
  <ChildaddClick={addClick} /></div>  );
}
  class ChildextendsPureComponent {
    render() {
      console.log("child render");
      const { addClick } =this.props;

      return (
        <div><h3>Child</h3>
        <buttononClick={() =>console.log(addClick())}>add</button></div>   
     )
  }
}

useCallback(fn, deps)相当于useMemo(() => fn, deps)。

注意依赖项数组不不会作为参数传给“创建”函数。虽然从概念上来说它表现为:所有“创建”函数中引⽤用的值都应该出现在依赖项数组中。未来编译器器会更更加智能,届时⾃自动创建数组将成为可能。

补充介绍React的memo与useMemo及useCallback

React.memo

  • 概念解析
    • 将组件在相同的情况下的渲染结果,缓存渲染结果
    • 当组件传入props相同的参数时,浅对比之后有之前的传入项,则复用缓存最近一次结果
    • 数据对比,只做浅对比。如果需要控制对比过程,需要自己写自定义比对函数。传参数置第二个参数 -请注意不要与 shouldComponetUpdate 返回值混合

类组件通过比对数据,可以控制渲染的方式?

  • React.PureComponent
  • shouldComponentUpdate

hooks的useMemo

  • 概念解析
    • 函数组件的缓存渲染结果
    • 可以将当前的组件节点颗粒化
    • 通过第二个参数去判断,是否更新useMemo的回调函数
    • 回调函数是一个必包,如果创建使用了 useState,会缓存 state 值,不会拿到实时更新的值

hooks的useCallback

  • 概念解析
    • 返回一个需要缓存的函数
    • 传递需要更新的依赖项,一般回调函数内部使用的数据,都需要添加在依赖项中
    • 避免父子之间,子级生成新的props函数,从而刷新子组件
      • 当父级组件传递给子级组件一个函数时,无状态组件每次都会重新生成新的props函数,导致子组件刷新
    • 一般联合useMemo一起使用

到此这篇关于React中useMemo与useCallback的区别的文章就介绍到这了,更多相关React useMemo与useCallback区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • React中嵌入多个组件的多种方式详解

    React中嵌入多个组件的多种方式详解

    在 React 中,嵌入和使用多个组件是构建用户界面的核心机制,React 鼓励组件化开发,允许将 UI 拆分为独立、可复用的部分,以下是实现多个组件嵌套和使用的常见方法,需要的朋友可以参考下
    2025-08-08
  • ReactNative错误采集原理在Android中实现详解

    ReactNative错误采集原理在Android中实现详解

    这篇文章主要为大家介绍了ReactNative错误采集原理在Android中实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Vite+React搭建开发构建环境实践记录

    Vite+React搭建开发构建环境实践记录

    这篇文章主要介绍了Vite+React搭建开发构建环境实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 详解如何在React应用中实现多语言支持

    详解如何在React应用中实现多语言支持

    随着全球化的推进,网站和应用程序需要支持多种语言以满足不同地区用户的需求,国际化(i18n)是指设计和开发能够适应不同语言和文化环境的产品,在 React 应用中实现国际化可以提高用户体验并扩大应用的受众范围,本文将介绍如何在 React 应用中实现多语言支持
    2025-04-04
  • 一文详解如何React中实现插槽

    一文详解如何React中实现插槽

    这篇文章主要为大家详细介绍了如何在React中实现插槽,文中的示例代码讲解详细,对我们的学习或工作具有一定的借鉴价值,需要的可以了解一下
    2023-03-03
  • React中多语言的配置方式

    React中多语言的配置方式

    这篇文章主要介绍了React中多语言的配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • React 时间切片理解分析

    React 时间切片理解分析

    这篇文章主要为大家介绍了React 时间切片理解分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 详解使用webpack+electron+reactJs开发windows桌面应用

    详解使用webpack+electron+reactJs开发windows桌面应用

    这篇文章主要介绍了详解使用webpack+electron+reactJs开发windows桌面应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • React报错Type '() => JSX.Element[]' is not assignable to type FunctionComponent

    React报错Type '() => JSX.Element[]&apos

    这篇文章主要为大家介绍了React报错Type '() => JSX.Element[]' is not assignable to type FunctionComponent解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • React三大属性之props的使用详解

    React三大属性之props的使用详解

    这篇文章主要介绍了React三大属性之props的使用详解,帮助大家更好的理解和学习使用React,感兴趣的朋友可以了解下
    2021-04-04

最新评论