首页 > 其他分享 >描述React Hooks中的useMemo和useCallback的区别和用途。

描述React Hooks中的useMemo和useCallback的区别和用途。

时间:2024-06-21 16:00:24浏览次数:12  
标签:函数 useMemo Hooks 时才 useCallback 记忆 组件

React Hooks API中的useMemouseCallback都是用于优化性能的钩子,但它们的用途和工作方式略有不同:
推荐大家看看我过往的文章

useMemo

useMemo是一个性能优化钩子,它返回一个记忆化的值。useMemo可以避免在组件渲染时进行昂贵的计算或操作,通过记忆化的方式缓存计算结果,仅当依赖项发生变化时才重新计算。

用途:

  • 当你需要执行一些计算密集型的操作,而这些操作的结果在组件的多个渲染之间不会改变时,使用useMemo可以避免不必要的重新计算。

示例:

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

在这个例子中,computeExpensiveValue函数只有在ab改变时才会重新执行。

useCallback

useCallback钩子返回一个记忆化的回调函数。这个回调函数仅在其依赖项发生变化时才会重新创建。

用途:

  • 当你将回调函数传递给经过优化的子组件,并且这些子组件会对其props进行浅比较时,使用useCallback可以避免子组件不必要的重新渲染。
  • 它特别适用于传递给如useEffectuseMemo或类组件的shouldComponentUpdate方法中的回调函数。

示例:

const memoizedCallback = useCallback(
  () => {
    doSomething(a, b);
  },
  [a, b],
);

在这个例子中,传递给useCallback的函数只有在ab改变时才会重新创建。

区别

  • 记忆化内容: useMemo记忆化一个值(可以是计算结果),而useCallback记忆化一个函数。
  • 使用场景: useMemo通常用于避免昂贵的计算,useCallback用于避免创建函数,特别是那些作为props传递给子组件的函数。
  • 依赖项: 两者都接受一个依赖项数组,但useMemo的依赖项影响计算结果的重新计算,而useCallback的依赖项影响回调函数的重新创建。

总结

  • 使用useMemo来记忆化那些在渲染过程中可能重复执行的计算结果。
  • 使用useCallback来记忆化回调函数,以避免在子组件中不必要的渲染。

正确使用这两个钩子可以帮助你优化React组件的性能,尤其是在处理大型列表或复杂组件时。
在这里插入图片描述

更多前端面试题 需要的同学转发本文+关注+【点击此处】即可获取! 加油复习

标签:函数,useMemo,Hooks,时才,useCallback,记忆,组件
From: https://blog.csdn.net/weixin_44714345/article/details/139863353

相关文章

  • React小记(二)_组件通信、生命周期、hooks等
    10、组件通信(父=>子)10.1基本使用1、传递方式与函数组件一致2、接收时通过this.props.mes获取importReactfrom'react'classSonextendsReact.PureComponent{render(){return(<><h3>子组件</h3>{/*2、接收*/}......
  • React Hooks路由传参
    场景:如何把想要的参数带到跳转过去的页面里呢?很简单上代码:在你需要跳转的页面上引入Link用来跳转使用Link跳转并携带参数然后需要什么参数就带什么过去喽 这里record里面存的就是我的数据我只需要id和state然后到你跳转过去的页面(也就是需要使用这个页面的这俩参数的页......
  • tapPromise 函数 (绑定hooks方法)tapable 库,创建自定义插件的库
    tapPromise函数(绑定hooks方法)tapable库,创建自定义插件的库刚看到了一个插件的use函数//引入组件use(plugin:IPluginClass,options?:IPluginOption){if(this._checkPlugin(plugin)&&this.canvas){this._saveCustomAttr(plugin);constpluginRu......
  • Vue 3 Composition API与Hooks模式
    Vue3的CompositionAPI引入了Hook函数的概念,这是一种更加模块化和可重用的状态管理和逻辑组织方式。自定义Hook首先,我们创建一个自定义Hook,例如useCounter,它封装了计数器的逻辑://useCounter.jsimport{ref}from'vue';exportfunctionuseCounter(){c......
  • 【React】react函数式编程常用hooks讲解
    ReactHooks是React16.8版本引入的一项重要特性,它极大地简化和优化了函数组件的开发过程。React中常用的Hooks,包括useState、useEffect、useContext、useReducer、useCallback、useMemo、useRef、useLayoutEffect等。这些Hooks涵盖了状态管理、副作用处理、性能......
  • React中何时使用memo、useCallback、useMemo以及useRef进行性能优化
    react无法做到像vue一样自动收集依赖更新(期待react19的ReactCompiler),需要开发人员手动的进行性能优化,此时memo、useCallback、useMemo、useRef就是性能优化中的重要API本文虽然介绍可应用场景,但是正常开发中,尤其是useCallback。除非遇到性能问题或者组件库封装,亦或......
  • Vue3实战笔记(40)—组件逻辑复用:自定义Hooks的完全指南
    文章目录前言一、状态管理二、副作用处理三、生命周期钩子总结前言自定义Hooks是Vue3中的一个重要特性,它允许您创建可重用的函数,以便在组件之间共享状态和逻辑。以下是一些关于自定义Hooks的常见用法。一、状态管理使用reactive或ref来创建响应式数据,并在组件中......
  • reactk中useCallback的使用场景
    useCallback 是React中的一个Hook,用于优化性能并避免不必要的函数重新创建。在React中,当一个组件重新渲染时,其内部的函数也会被重新创建。这可能会导致向子组件传递的回调函数发生变化,从而导致子组件不必要地重新渲染。为了避免这种情况,可以使用 useCallback 来创建记忆......
  • React 中的useCallback
    useCallback 是React中的一个钩子函数,它用于创建一个稳定的回调函数,并且可以帮助优化性能。通常情况下,当父组件向子组件传递回调函数时,如果没有使用 useCallback,每次父组件重新渲染时,都会创建一个新的回调函数实例,这可能导致子组件不必要的重新渲染。使用 useCallback 可以......
  • currentTuningFileInfoRef.current = useMemo(() => { return tuningFileOptionsMemo?
    在React中,useMemo和useEffect都是Hooks,但它们各自有不同的用途和适用场景。上述代码片段使用了useMemo来memoize(记忆化)一个计算结果,确保只要依赖项(tuningFileOptionsMemo和currentTuningFileId)不变,返回的引用也不会改变。这样做可以避免在每次渲染时都进行查找操作,从而提......