React项目知识积累(四)

1.useMemo( )

在 React 中,useMemo 是一个 Hook,用于记忆计算结果,只有当依赖项之一发生变化时,才会重新计算。这有助于避免不必要的计算和渲染,从而提高应用程序的性能。

基本语法如下:

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

在这个例子中,computeExpensiveValue 是一个可能很昂贵的计算函数,它依赖于参数 abuseMemo 的第一个参数是一个函数,该函数在组件首次渲染时执行,并返回想要记忆的值。第二个参数是一个数组,包含了这个函数的依赖项。只有当数组中的任何值发生变化时,computeExpensiveValue 函数才会重新执行。

useMemo 特别有用在处理复杂计算、大型对象或数组时,它可以防止不必要的重复计算,从而节省性能。

例如,假设你有一个计算两个数相加的函数,并且你想要在组件中记忆这个结果:

import React, { useState, useMemo } from 'react';function MyComponent({ initialNumber }) {const [number, setNumber] = useState(initialNumber);const [number2, setNumber2] = useState(initialNumber + 1);const sum = useMemo(() => number + number2, [number, number2]);return (<div><p>Number: {number}</p><p>Number2: {number2}</p><p>Sum: {sum}</p><button onClick={() => setNumber(number + 1)}>Increment Number</button><button onClick={() => setNumber2(number2 + 1)}>Increment Number2</button></div>);
}

在这个例子中,sum 是通过 useMemo 记忆的,它只有在 numbernumber2 发生变化时才会重新计算。这样,只要 numbernumber2 的值保持不变,sum 的值就不会改变,从而节省了性能。

useMemo 是一个强大的性能优化工具,但使用时需要谨慎,因为它可能会隐藏潜在的性能问题,使代码更难维护。在决定使用 useMemo 之前,最好先考虑是否真的需要它。

const subMit = useMemo(()=>{return dataValue?.map(()=>{return { data };});},[ date ]);

2. :global{  }

在CSS中,:global 伪类用于选择器匹配文档中的所有元素,而不考虑它们是否位于一个特定的作用域内。这通常用于在CSS中引入外部的CSS文件或定义全局样式。

使用 :global 伪类,你可以确保选择器不会与当前组件或作用域内的任何本地选择器冲突。这对于使用CSS预处理器或模块化CSS时非常有用,因为它可以帮助避免命名空间的冲突。

下面是一个使用 :global 伪类的例子:

/* 在组件内部使用:global来引入全局样式 */
.global-class {color: red;
}/* 或者在组件外部定义全局样式 */
:global .global-class {color: blue;
}//局部作用
.bankenName{:global{.ant-divider-horizontal{font-size:16px !important;}}
}

在这个例子中,.global-class 是一个全局定义的类,它不会与组件内部定义的相同类名产生冲突。.global-class 会选择文档中的所有具有该类名的元素,并应用蓝色文字样式。

请注意,:global 伪类在不同的CSS处理器和预处理器中可能有不同的支持程度。在Sass中,你可以使用 @global 指令来实现相同的功能。

在 CSS Modules 中,通常情况下,样式是局部作用域的,即只应用于特定的组件或模块。但有时你可能需要定义一些全局样式,例如重置默认样式或设置全局主题。这时,可以使用 :global{ } 来定义全局样式规则。

3.自定义函数方法

在一个页面定义多个函数方法,在另一个页面调用。

//自定义组件的页面,可以定义多个组件,灵活调用
export const skipToElement = (elementId) => {const element = document.getElementById(elementId);if (element) {element.scrollIntoView({ block: 'start', behavior: 'smooth' });}
};export const routes = {homePage: {label: <div>首页</div>,key: 1,neme: 'home',Children: [{ key: value }, { key: value }],},snowball: {label: "snow",key: 2,neme: 'snow',Children: [{ key: value }, { key: value }],},
};//另一个页面调用函数
import {routes , skipToElement} from '../../../../../base';const onclick=(values)=>{if(values){skipToElement(values);}
}

4.Modal.confirm( )

antd中的Modal弹窗,进行交互的操作。

  Modal.confirm({title: '标题',icon: <Excalmation />,okText: '确定',cancelText: '取消',onOk: () => {},onCancel: () => {},});

5.includes()

includes() 方法用于判断数组是否包含某个指定的值,并返回一个布尔值。该方法是Array.prototype的实例方法,因此可以在任何数组对象上调用它。

const arr = [1, 2, 3, 4, 5];console.log(arr.includes(2)); // 输出:true
console.log(arr.includes(6)); // 输出:false

includes() 方法可以接受两个参数:

  1. searchElement(必选):要搜索的元素。
  2. fromIndex(可选):从该索引处开始搜索 searchElement。默认值为 0,表示从数组的开始位置搜索。
const arr = [1, 2, 3, 4, 5];console.log(arr.includes(2, 2)); // 输出:false
console.log(arr.includes(3, 3)); // 输出:true

includes() 方法是区分大小写的,也就是说,它使用的是全等比较(===)。如果你想进行不区分大小写的搜索,可以先将数组中的元素或要搜索的元素转换为相同的大小写形式,然后再使用 includes() 方法进行搜索。

const arr = ['apple', 'Banana', 'orange'];console.log(arr.includes('banana')); // 输出:false
console.log(arr.includes('Banana'.toLowerCase())); // 输出:true

在这个例子中,arr.includes('banana') 的结果是 false,因为 'banana''Banana' 是区分大小写的。而 arr.includes('Banana'.toLowerCase())'Banana' 转换为小写,然后再进行搜索,因此结果是 true

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

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

相关文章

html多节点生成图片并导出zip包

html多节点生成图片并导出zip包 背景 在做项目时遇到一个要将html节点展示的图片列表统一导出为zip包的需求。 难点 将html节点生成图片将多张图片加入zip包中&#xff0c;然后下载 解决html生成图片问题 参考html截图的思路使用 pnpm add html-to-image如何将图片资源生成z…

鸿蒙OS开发:【一次开发,多端部署】(多设备自适应能力)简单介绍

多设备自适应能力 介绍 本示例是《一次开发&#xff0c;多端部署》的配套示例代码&#xff0c;展示了[页面开发的一多能力]&#xff0c;包括自适应布局、响应式布局、典型布局场景以及资源文件使用。 名称简介 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhe…

数据可视化技术头歌测试合集

努力是为了不平庸~ 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰 目录 时间趋势可视化-柱形图 第1关&#xff1a;“大胃王”比赛数据柱形图绘制——绘制柱形图的基本步骤 任务描述 相关知识 观察和处理数据 绘…

Linux中gcc/g++的基本使用

目录 gcc/g的使用gcc/g是如何生成可执行文件的预处理编译汇编链接 库.o文件是如何与库链接的&#xff1f; debug版本和release版本 gcc/g的使用 在windows中&#xff0c;我们在VS中编写好了代码之后就可以直接在VS中对源码进行编译等操作后运行 而在Linux下&#xff0c;我们可…

LeetCode 279 —— 完全平方数

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此图利用动态规划进行求解&#xff0c;首先&#xff0c;我们求出小于 n n n 的所有完全平方数&#xff0c;存放在数组 squareNums 中。 定义 dp[n] 为和为 n n n 的完全平方数的最小数量&#xff0c;那么有状态…

vue 展示svg矢量图可缩放拖动

使用插件&#xff1a;svg-pan-zoom <template> <!-- svg图--><div id"svgContainer"></div> </template><script> import svgPanZoom from svg-pan-zoom import svgFile from ../datav/img/220kVscb.svg // 路径根据实际情况调…

MySQL存储过程实现累加运算 1+2+…+n 等于多少?

MySQL创建存储过程&#xff0c;实现累加运算&#xff0c;计算 12…n 等于多少。具体的代码如下 1、实现计算123…n的和 DELIMITER // CREATE PROCEDURE sp_add_sum_num(IN n INT) BEGIN DECLARE i INT; DECLARE sum INT; SET i 1; SET sum 0;WHILE i < n DO SET sum …

若依框架实战指南:从入门到精通

在当今快节奏的软件开发环境中&#xff0c;选择一个高效、可靠的开发框架至关重要。若依框架&#xff08;RuoYi&#xff09;作为一个基于Spring Boot和MyBatis的快速开发平台&#xff0c;以其强大的功能和易用性受到了广泛欢迎。本文将详细介绍若依框架的使用方式&#xff0c;包…

计算机组成结构—中断和异常

一、基本概念和分类 计算机在执行程序的过程中&#xff0c;有时会遇到一些异常情况或者特殊请求&#xff1b;这时就需要计算机暂停正在运行的程序&#xff0c;转而先去处理这些异常或特殊请求&#xff0c;处理结束之后再返回程序的断点处继续执行。这种处理方式就被称为 “中断…

顶坚北斗有源终端有什么功能跟用途

顶坚北斗有源终端作为现代卫星导航与通信技术融合的杰出代表&#xff0c;其用途广泛且功能强大。在广袤无垠的偏远山区、深邃的海洋以及荒芜的沙漠中&#xff0c;当用户面临移动通信信号无法覆盖的困境时&#xff0c;北斗有源终端便成为了连接世界的桥梁。 该终端的核心功能之一…

PE文件(六)新增节-添加代码作业

一.手动新增节添加代码 1.当预备条件都满足&#xff0c;节表结尾没有相关数据时&#xff1a; 现在我们将ipmsg.exe用winhex打开&#xff0c;在节的最后新增一个节用于存放我们要增加的数据 注意&#xff1a;飞鸽的文件对齐和内存对齐是一致的 先判断节表末尾到第一个节之间…

奥德彪的幸福VS码农的幸福

奥德彪的幸福 非洲国家布隆迪是一个全球最不发达国家之一&#xff0c;大部分居民以农业为生&#xff0c;其中包括香蕉&#xff0c;人们拿香蕉用来做饭也用来酿酒。 香蕉产地距离布隆迪首都布琼布拉很远&#xff0c;而这个国家又缺乏规模化的物流企业&#xff0c;于是就诞生了…

Linux进程--函数 system 和 popen 的区别

system() 和 popen() 是 C 语言中用于执行外部命令的两个函数&#xff0c;它们的功能类似&#xff0c;但在使用方式和特性上有一些区别。 system() system() 函数允许您在程序中执行外部命令&#xff0c;并等待该命令执行完成后继续执行程序。其基本语法如下&#xff1a; in…

如何使用脚本执行SQL Server 数据库压缩备份?

SQL Server 数据库压缩备份是否可以实现&#xff1f; 使用时&#xff0c;SQL Server 数据库会变得非常大&#xff0c;备份也是如此。它们占用大量磁盘空间&#xff0c;并且每次备份数据库或四处移动都非常耗时。因此&#xff0c;您可能想知道是否有任何方法可以创建压缩备份。…

pikachu靶场(SQL注入基于布尔的盲注)python实现

import requests from bs4 import BeautifulSoupurl "http://localhost:8086/pikachu-master/vul/sqli/sqli_blind_b.php"def get_database_name(url):dataname # 初始化一个空字符串用于存储数据库名dict abcdefghijklmnopqrstuvwxyz # 数据库名可能存在这些…

docker实战之搭建MYSQL8.0主从同步

目录 环境配置容器创建主服务器创建MYSQL容器新增my.cnf文件创建用户并授权 从服务器创建MYSQL容器新增my.cnf文件重启MYSQL容器配置主从同步 验证主从同步彩蛋 MySQL 主从同步&#xff08;Master-Slave Replication&#xff09;是一种常用的解决方案&#xff0c;它允许一个主服…

Golang实现根据文件后缀删除文件和递归删除文件

概述 这个功能会非常强大&#xff0c;因为在日常工作中&#xff0c;我通常会遇到需要批量删除文件的场景&#xff0c;通过这个方法&#xff0c;再结合我的另一个 命令行开发框架&#xff0c;能够很轻松的开发出这个功能。 代码 package zdpgo_fileimport ("errors"…

LabVIEW与串口通讯在运行一段时间后出现数据接收中断的问题

这些问题可能与硬件、软件或通信协议有关。以下是详细的原因分析和可能的解决方案&#xff1a; 一、硬件原因 串口线缆或接口问题&#xff1a; 由于长时间使用&#xff0c;串口线缆可能出现接触不良或损坏。接口松动也可能导致通讯中断。 解决方案&#xff1a;检查并更换串口…

C语言基础-内存申请和释放

在C语言中&#xff0c;malloc 和 free 是用于动态内存分配和释放的函数。而在C中&#xff0c;new 和 delete 提供了类似的功能&#xff0c;但它们之间有一些重要的区别。 1. malloc 和 free malloc malloc 函数用于在堆上动态地分配指定字节数的内存。它的原型在 stdlib.h 头…

【Text2SQL 经典模型】X-SQL

论文&#xff1a;X-SQL: reinforce schema representation with context ⭐⭐⭐⭐ Microsoft, arXiv:1908.08113 X-SQL 与 SQLova 类似&#xff0c;使用 BERT style 的 PLM 来获得 representation&#xff0c;只是融合 NL question 和 table schema 的信息的方式不太一样&#…