react 之 UseMemo

useMemo

在这里插入图片描述
在这里插入图片描述

看个场景

下面我们的本来的用意是想基于count的变化计算斐波那契数列之和,但是当我们修改num状态的时候,斐波那契求和函数也会被执行,显然是一种浪费

// useMemo
// 作用:在组件渲染时缓存计算的结果import { useState } from 'react'function factorialOf(n) {console.log('斐波那契函数执行了')return n <= 0 ? 1 : n * factorialOf(n - 1)
}function App() {const [count, setCount] = useState(0)// 计算斐波那契之和const sumByCount = factorialOf(count)const [num, setNum] = useState(0)return (<>{sum}<button onClick={() => setCount(count + 1)}>+count:{count}</button><button onClick={() => setNum(num + 1)}>+num:{num}</button></>)
}export default App

useMemo缓存计算结果

思路: 只有count发生变化时才重新进行计算

import { useMemo, useState } from 'react'function fib (n) {console.log('计算函数执行了')if (n < 3) return 1return fib(n - 2) + fib(n - 1)
}function App() {const [count, setCount] = useState(0)// 计算斐波那契之和// const sum = fib(count)// 通过useMemo缓存计算结果,只有count发生变化时才重新计算const sum = useMemo(() => {return fib(count)}, [count])const [num, setNum] = useState(0)return (<>{sum}<button onClick={() => setCount(count + 1)}>+count:{count}</button><button onClick={() => setNum(num + 1)}>+num:{num}</button></>)
}export default App

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#中的WebApi响应Accept头,自动返回xml或者json

Global.asax.cs中的Application_Start方法添加 GlobalConfiguration.Configuration.Formatters.Clear(); GlobalConfiguration.Configuration.Formatters.Add(new XmlMediaTypeFormatter()); GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter())…

红队渗透靶机:LEMONSQUEEZY: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录扫描 1、dirsearch 2、gobuster WEB phpmyadmin wordpress wpscan 登录wordpress 登录phpmyadmin 命令执行 反弹shell 提权 get user.txt 信息收集 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~…

进程间通讯方式

管道: mkfifo 和匿名管道。主要在父子进程上面进行进程间通信比较方便。实际上存储在内核缓存区里面。 无论是匿名管道,还是命名管道,在内核都是一个文件。只要是文件就要有一个 inode。这里我们又用到了特殊 inode、字符设备、块设备,其实都是这种特殊的 inode。 在这种…

CANoe64.exe - 系统错误 找不到VCRUNTIME140_ 1.dll

环境&#xff1a; CANoe12 Win10 专业版 问题描述&#xff1a; CANoe64.exe - 系统错误 找不到VCRUNTIME140_ 1.dll 解决方案&#xff1a; VCRUNTIME140_1.dll是Microsoft Visual C Redistributable for Visual Studio 2015的一部分。它是一个动态链接库&#xff08;DLL&a…

[网络安全]IIS---FTP服务器 、serverU详解

一 . FTP服务器(File Transfor Protocol) : 协议:文件传输协议 端口号:TCP: 20(数据) / 21(控制) 二 . FTP工作方式: 1.主动模式 : (FTP服务器21端口与FTP客户端产生的随机端口先建立连接 建立连接后,再使用FTP服务器21端口与FTP客户端创建的一个新的随机端口进行发送…

ElementUI安装与使用指南

Element官网-安装指南 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 一、开发环境配置 电脑需要先安装好node.js和vue2或者vue3 安装Node.js Node.js 中文网 安装node.js命令&#xff1a;brew install node node.js安装完后&#xff0c;输入&#xff1…

大数据开发之离线数仓项目(用户行为采集平台)(可面试使用)

第 1 章&#xff1a;数据仓库概念 数据仓库&#xff0c;是为企业指定决策&#xff0c;提供数据支持的&#xff0c;可以帮助企业&#xff0c;改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括&#xff1a;业务数据、用户行为数据和爬虫数据等。 业务数据&#xff1a…

pinctrl子系统与gpio子系统实验-对驱动进行测试

一. 简介 前面几篇文章学习了在设备树文件中创建设备节点信息&#xff08;基于gpio子系统与pinctrl子系统&#xff09;&#xff0c;驱动代码的实现。文章地址如下&#xff1a; pinctrl子系统与gpio子系统实验-向设备树文件添加Led设备节点-CSDN博客 pinctrl子系统与gpio子系…

开源:基于Vue3.3 + TS + Vant4 + Vite5 + Pinia + ViewPort适配..搭建的H5移动端开发模板

vue3.3-Mobile-template 基于Vue3.3 TS Vant4 Vite5 Pinia ViewPort适配 Sass Axios封装 vconsole调试工具&#xff0c;搭建的H5移动端开发模板&#xff0c;开箱即用的。 环境要求&#xff1a; Node:16.20.1 pnpm:8.14.0 必须装上安装pnpm&#xff0c;没装的看这篇…

使用ChatGPT学习大象机器人六轴协作机械臂mechArm

引言 我是一名机器人方向的大学生&#xff0c;近期学校安排自主做一个机器人方面相关的项目。学校给我们提供了一个小型的六轴机械臂&#xff0c;mechArm 270M5Stack&#xff0c;我打算使用ChatGPT让它来辅助我学习如何使用这个机械臂并且做一个demo。 本篇文章将记录我是如何使…

spring中生成jwtToken字符串以及解析手写通用工具类

当前使用JWT&#xff0c;肯定得提前准备jwt相关的导入依赖。 <!-- 关于jwt 生成令牌--> <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt.version}</version> </dependency…

人工智能基础-Numpy矩阵运算-聚合操作

加、减、乘、除、整除 幂、取余、倒数、绝对值 三角函数 e的x次方、3的x次方、logx、log2为底、log10为底 矩阵运算 加、减、乘&#xff08;对应数相乘&#xff09;、矩阵相乘运算、转至 向量和矩阵的运算 加法 对应相加 改变维度后相加 乘法 矩阵的逆 聚合操作 …

关于JVM常见的十道面试题

Java中的引用类型有哪些&#xff1f;这些引用类型对应的使用场景有哪些&#xff1f;为什么要有这么多的引用类型&#xff1f; 在Java中&#xff0c;引用是指向对象在内存中存储位置的指针&#xff0c;引用类型主要是分为四种&#xff1a;强引用、软引用、弱引用、虚引用 强引…

Javaweb实现的学生宿舍管理系统

Javaweb实现的学生宿舍管理系统 文章目录 Javaweb实现的学生宿舍管理系统系统介绍技术选型成果展示源码获取账号地址及其他说明 系统介绍 Javaweb实现的学生宿舍管理系统采用jspservlet技术实现了如下功能模块&#xff0c;分别是宿舍管理员管理、学生管理、宿舍楼管理、缺勤记…

【八大排序】直接插入排序 | 希尔排序 + 图文详解!!

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C语言进阶之路 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 一、排序的概念二、直接插入排序2.1 基本思想2.2 适用说明2.3 过程图示2.4 代码实现2.…

《高性能MySQL》

文章目录 一、创建1. 磁盘1.1 页、扇区、寻道、寻址、硬盘性能 2. 行结构row_format2.1 Compact紧凑2.1.1 行溢出2.1.2 作用2.1.3 内容1-额外信息1、变长字段长度2、NULL值列表3、记录头信息 2.1.4 内容2-真实数据4、表中列的值5、transaction_id6、roll_point7、row_id 2.2 dy…

AI算力专题:AI服务器催化HBM需求爆发,核心工艺变化带来供给端增量

今天分享的是AI算力系列深度研究报告&#xff1a;《AI算力专题&#xff1a;AI服务器催化HBM需求爆发&#xff0c;核心工艺变化带来供给端增量》。 &#xff08;报告出品方&#xff1a;太平洋证券&#xff09; 报告共计&#xff1a;26页 HBM即高带宽存储器&#xff0c;应用场景…

18- OpenCV:基于距离变换与分水岭的图像分割

目录 1、图像分割的含义 2、常见的图像分割方法 3、距离变换与分水岭介绍 4、相关API 5、代码演示 1、图像分割的含义 图像分割是指将一幅图像划分为若干个具有独立语义的区域或对象的过程。其目标是通过对图像进行像素级别的分类&#xff0c;将图像中不同的区域或对象分离…

C++类和对象——运算符重载详解

目录 1.运算符重载概念 2.加号运算符重载 通过全局函数重载 代码示例&#xff1a; 3.左移运算符重载 代码示例&#xff1a; 4.递增运算符重载 代码示例&#xff1a; 5.赋值运算符重载 深拷贝 代码示例&#xff1a; 6.关系运算符重载 代码示例&#xff1a; 7.函…

MSVC++远程调试

1. 介绍 MSVC的调试功能非常强大&#xff0c;可以下断点&#xff0c;单步调试&#xff0c;查看堆栈变量信息等。实际用于生产的电脑环境复杂&#xff0c;更容易发生Bug。生产电脑&#xff0c;由于各种原因有些可能无法安装MSVC用来现场调试。基于打印日志&#xff0c;查看日志…