广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >ReactuseMemo与useCallabck有什么区别
  • 352
分享到

ReactuseMemo与useCallabck有什么区别

ReactuseCallbackuseMemo区别ReactuseCallbackReactuseMemo 2022-12-20 15:12:26 352人浏览 泡泡鱼
摘要

目录看官方的文档介绍这两个api的概念useMemouseCallback看TS类型总结来个 demo本质原因看官方的文档介绍这两个api的概念 useMemo const memo

看官方的文档介绍这两个api的概念

useMemo

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

返回一个 memoized 值。

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

2、如果没有提供依赖项数组,useMemo 在每次渲染时都会计算新的值。

useCallback

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

返回一个 memoized 回调函数。

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

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

看TS类型

 
    // allow undefined, but don't make it optional as that is very likely a mistake
    function useMemo<T>(factory: () => T, deps: DependencyList | undefined): T;
 
    // A specific function type would not trigger implicit any.
    // See https://GitHub.com/DefinitelyTyped/DefinitelyTyped/issues/52873#issuecomment-845806435 for a comparison between `Function` and more specific types.
    // tslint:disable-next-line ban-types
    function useCallback<T extends Function>(callback: T, deps: DependencyList): T;
  • 泛型 T 在 useCallback 中是一个钩子函数
  • 在 useMemo 中是一个返回值。

总结

返回的值类型不同

  • useMemo 返回的是计算值
  • useCallback 返回的是一个回调函数

来个 demo

import React, { FC, useCallback, useMemo, useState } from 'react';
const Index: FC = (props) => {
  const [count, setCount] = useState(0);
  const isEvenNumber = useMemo(() => {
    return count % 2 === 0;
  }, [count]);
  const onClick = useCallback(() => {
    setCount(count + 1);
  }, [count]);
  return (
    <div>
      <div>{count} is {isEvenNumber ? 'even':'odd'} number</div>
      <button onClick={onClick}></button>
    </div>
  );
};

useCallback 和 useMemo 的参数都是一个函数加一个依赖数组,依赖没有改变时直接返回内存中缓存的结果,无需重复计算。简单理解就是 useCallback 缓存事件处理函数,useMemo 缓存二次计算的结果,如上面的点击事件,以及通过 count 值判断奇数偶数的二次计算结果。

本质原因

React 的函数组件是非常好用的东西,相比 class 写法以及 Vue 的对象挂载写法简洁很多,代码测试复用成本低,容易入手,但也带来一些问题,无状态函数很理想,但现实有一些计算开销大、组件渲染频繁的场景是需要状态的,每次都计算一遍状态(callback 和 二次计算值)无疑很浪费内存,函数不像对象(React class 写法或者 Vue 组件写法)可以直接将状态挂载在自身,没有浪费内存的问题,要实现类似的效果只能找一个的内存挂载点挂载这些东东,所以有了 useCallback 和 useMemo 这些 hook。

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

--结束END--

本文标题: ReactuseMemo与useCallabck有什么区别

本文链接: https://www.lsjlt.com/news/175347.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ReactuseMemo与useCallabck有什么区别
    目录看官方的文档介绍这两个api的概念useMemouseCallback看TS类型总结来个 demo本质原因看官方的文档介绍这两个api的概念 useMemo const memo...
    99+
    2022-12-20
    React useCallback useMemo区别 React useCallback React useMemo
  • Integer与int有什么区别
    Integer与int有什么区别?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Integer和int的区别Integer的默认初始值是null,而int的初始值是int,也...
    99+
    2023-06-06
  • nodejs与javascript有什么区别
    本篇文章给大家分享的是有关nodejs与javascript有什么区别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JavaScript介绍:JavaScript(简称“JS”...
    99+
    2023-06-15
  • asp与javascript有什么区别
    这篇文章主要介绍asp与javascript有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!区别是:asp是网页的一种格式,ASP是“Active Server Page”的缩写,意为“动态服务器页面”;ja...
    99+
    2023-06-15
  • JavaStringBuffer与StringBuilder有什么区别
    目录一、StringBuffer与StringBuilder的共同之处二、StringBuffer与StringBuilder的不同之处三、单线程StringBuffer与Strin...
    99+
    2023-01-18
    Java StringBuilder Java StringBuffer
  • Nodejs与Golang有什么区别
    本文小编为大家详细介绍“Nodejs与Golang有什么区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“Nodejs与Golang有什么区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。我们来谈谈 NodeJ...
    99+
    2023-06-27
  • angular与vue有什么区别
    angular与vue的区别:1、学习曲线,Angular是一个完整的框架,学习曲线相对较陡峭,Vue是更简单容易上手的框架;2、性能,Angular在处理大型应用程序时表现出色,Vue是响应式的机制来追踪数据的变化;3、生态系统,Angu...
    99+
    2023-08-10
  • ado与php有什么区别
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑什么是ADO?ADO 是一项微软的技术ADO 指 ActiveX 数据对象(ActiveX Data Objects)ADO 是一个微软的 Active-X 组件ADO ...
    99+
    2021-10-16
    ado php
  • InnoDB与MyISAM有什么区别
    MySQL 中 InnoDB 和 MyISAM 区别1、事务和外键InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID。如果应用中需要执行大量的INSERT或U...
    99+
    2022-10-18
  • kafka与redis有什么区别
    这篇文章给大家分享的是有关kafka与redis有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。kafka与redis的区别:1、redis消息推送(基于分布式 pub/...
    99+
    2022-10-18
  • redis与mongodb有什么区别
    redis与mongodb有什么区别?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!MongoDB更类似MySQL,支持字段...
    99+
    2022-10-18
  • Redis与Memcache有什么区别
    这篇文章主要介绍了Redis与Memcache有什么区别,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。Redis和Memcache 都是基于内存...
    99+
    2022-10-18
  • Redis与Memcached有什么区别
    小编给大家分享一下Redis与Memcached有什么区别,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!memcached和redis,作为近些年最常用的缓存服务器,相信大家对它们再熟悉不过了...
    99+
    2022-10-18
  • nosql与mysql有什么区别
    小编给大家分享一下nosql与mysql有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL与NoSQL都是市场上...
    99+
    2022-10-18
  • js与css有什么区别
    这篇文章主要介绍“js与css有什么区别”,在日常操作中,相信很多人在js与css有什么区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js与css有什么区别”的疑惑有所帮...
    99+
    2022-10-19
  • javascript与vbscript有什么区别
    这篇文章主要介绍“javascript与vbscript有什么区别”,在日常操作中,相信很多人在javascript与vbscript有什么区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2022-10-19
  • Oracle与Mysql有什么区别
    Oracle与Mysql有什么区别,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  Oracle与Mysql的区别:  Ora...
    99+
    2022-10-18
  • javaweb与javascript有什么区别
    本篇内容介绍了“javaweb与javascript有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2022-10-19
  • wxml与html5有什么区别
    这篇文章跟大家分析一下“wxml与html5有什么区别”。内容详细易懂,对“wxml与html5有什么区别”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深...
    99+
    2022-10-19
  • redis与mysql有什么区别
    小编给大家分享一下redis与mysql有什么区别,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!区别分析如下:1、mysql和redis的数据库类型mysql是关系型数据库,主要用于存放持...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作