解析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 位运算符,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • React Native实现进度条弹框的示例代码

    React Native实现进度条弹框的示例代码

    本篇文章主要介绍了React Native实现进度条弹框的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • React+CSS 实现绘制竖状柱状图

    React+CSS 实现绘制竖状柱状图

    这篇文章主要介绍了React+CSS 实现绘制竖状柱状图,文章围绕主题展开详细的内容介绍。具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • React 19 竞态问题解决

    React 19 竞态问题解决

    本文主要介绍了React 19 竞态问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • 详解React如何实现代码分割Code Splitting

    详解React如何实现代码分割Code Splitting

    这篇文章主要为大家介绍了React如何实现代码分割Code Splitting示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 使用React实现一个简单的待办事项列表的示例代码

    使用React实现一个简单的待办事项列表的示例代码

    这篇文章我们将详细讲解如何建立一个这样简单的列表,文章通过代码示例介绍的非常详细,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-08-08
  • React实现虚拟滚动的三种思路详解

    React实现虚拟滚动的三种思路详解

    在​​web​​开发的过程中,或多或少都会遇到大列表渲染的场景,为了解决大列表造成的渲染压力,便出现了虚拟滚动技术,本文主要介绍虚拟滚动的三种思路,希望对大家有所帮助
    2024-04-04
  • React中设置样式style方式

    React中设置样式style方式

    这篇文章主要介绍了React中设置样式style方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • React跨端动态化之从JS引擎到RN落地详解

    React跨端动态化之从JS引擎到RN落地详解

    这篇文章主要为大家介绍了React跨端动态化之从JS引擎到RN落地,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • React中的Component组件详解

    React中的Component组件详解

    本章节,我们将一起探讨 React 中类组件和函数组件的定义,不同组件的通信方式,以及常规组件的强化方式,帮助你全方位认识 React 组件,从而对 React 的底层逻辑有进一步的理解,感兴趣的朋友跟随小编一起看看吧
    2023-06-06

最新评论