当前位置: 首页 > news >正文

React Native 从类组件到函数组件

1. 发展趋势

React Native社区中的趋势是朝向使用函数组件(Functional Components)和Hooks的方向发展,而不是使用类组件(Class Components)。

React Native自推出Hooks API以来,函数组件和Hooks的使用变得更加普遍和推荐。Hooks提供了更简洁、可读性更高的代码,并且在状态管理、生命周期等方面提供了更强大的功能。使用Hooks可以更容易地共享逻辑和状态逻辑,而无需使用类组件的复杂结构。

以下是一些关于为什么React Native社区更倾向于使用函数组件和Hooks的理由:

可读性和简洁性: 函数组件通常比类组件更短,更易于阅读和理解。Hooks的引入使得在函数组件中管理状态和副作用变得更为直观。

逻辑复用: Hooks使得逻辑的复用更加容易。你可以使用自定义Hooks将组件之间的逻辑进行抽象和共享,而不需要使用高阶组件或渲染属性。

更直观的副作用处理: 使用useEffect等Hooks来处理副作用相对于类组件中的生命周期方法更为直观。

更容易集成现代JavaScript特性: 使用函数组件和Hooks可以更容易地与ES6+和TypeScript等现代JavaScript特性集成。

更好的性能优化: Hooks使得React能够更好地进行性能优化,并且React Native的未来版本也更加注重性能。

2. Hooks vs Class

Hooks 提供了在函数组件中执行副作用和访问状态的能力。下面是一些常见的 Hooks 及其在类组件中对应的生命周期方法:

  1. useState - setState:
  • 函数组件: 使用 useState 来声明和更新状态。
  • 类组件: 使用 this.setState 来更新状态。
  1. useEffect - componentDidMount, componentDidUpdate, componentWillUnmount:

    • 函数组件: 使用 useEffect 来执行副作用,可以模拟生命周期方法的行为。
    • 类组件:
      • componentDidMount: 在组件挂载后调用。
      • componentDidUpdate: 在组件更新后调用。
      • componentWillUnmount: 在组件卸载前调用。
useEffect(() => {// componentDidMount 和 componentDidUpdate 的逻辑return () => {// componentWillUnmount 的逻辑};
}, [dependencies]);
  1. useContext - contextType:
* 函数组件: 使用 `useContext` 来访问 React 上下文。
* 类组件: 使用 `contextType` 来访问 React 上下文。
  1. useReducer - setStatethis.setState:
  • 函数组件: 使用 useReducer 来管理复杂状态逻辑。
  • 类组件: 可以使用 setState 或 this.setState,但 useReducer 更适合处理复杂状态逻辑。
  1. useCallback - shouldComponentUpdate:
  • 函数组件: 使用 useCallback 来记忆回调函数,以防止每次重新渲染时重新创建它。
  • 类组件: 在 shouldComponentUpdate 中进行优化,防止不必要的渲染。
  1. useMemo - shouldComponentUpdate:
  • 函数组件: 使用 useMemo 来记忆计算昂贵的计算结果。
  • 类组件: 在 shouldComponentUpdate 中进行优化,防止不必要的渲染。

这些是一些常见的 Hooks,它们为函数组件提供了类似于类组件生命周期方法的功能。使用 Hooks 可以更清晰地组织和重用逻辑。需要注意的是,使用 Hooks 时,每个 Hook 都是相互独立的,而类组件中的生命周期方法可能会涵盖多个生命周期阶段。

2.1 useState

useState 是 React Hooks 中用于在函数组件中添加状态的关键之一。它允许你在函数组件中添加和管理状态,而不需要使用类组件。useState 返回一个数组,其中包含两个元素:当前状态的值和一个更新状态的函数。

下面是 useState 的基本用法:

import React, { useState } from 'react';function MyComponent() {// 使用 useState 定义一个状态变量,初始值为 'initialValue'const [state, setState] = useState('initialValue');return (<div><p>Current State: {state}</p>{/* 使用 setState 函数来更新状态 */}<button onClick={() => setState('newValue')}>Update State</button></div>);
}export default MyComponent;

在上面的例子中,useState 被调用并传入初始状态 'initialValue',返回的数组包含当前状态值 state 和更新状态的函数 setState。通过点击按钮,可以触发 setState 函数来更新状态。

useState 的基本用法包括:

  • 定义状态: 调用 useState 来声明一个状态变量,并传入初始值。
  • 获取当前状态值: 使用返回的数组的第一个元素(例如,state)来获取当前状态的值。
  • 更新状态: 使用返回的数组的第二个元素(例如,setState)来更新状态。setState 函数接受新的状态值作为参数。

请注意,useState 可以在组件中多次调用,以添加多个状态变量。每个状态变量都有自己独立的 setState 函数。

import React, { useState } from 'react';function MyComponent() {const [count, setCount] = useState(0);const [text, setText] = useState('');return (<div><p>Count: {count}</p><button onClick={() => setCount(count + 1)}>Increment Count</button><p>Text: {text}</p><inputtype="text"value={text}onChange={(e) => setText(e.target.value)}/></div>);
}export default MyComponent;

在上面的例子中,MyComponent 组件有两个状态变量 counttext,每个都有自己的 setState 函数。

2.2 useEffect

useEffect 是 React Hooks 中用于处理副作用的关键之一。它在函数组件中提供了执行副作用的能力。useEffect 接受两个参数:

  • 一个函数,包含需要执行的副作用代码。
  • 一个可选的依赖数组,用于指定在依赖项发生变化时才重新运行 useEffect。
import React, { useEffect } from 'react';function MyComponent() {// 在组件挂载后执行一次useEffect(() => {// 执行副作用的代码// 清理函数(componentWillUnmount 的替代)return () => {// 在组件卸载前执行清理逻辑};}, [dependencies]); // 依赖项数组return (// 组件的 JSX);
}export default MyComponent;
  • Effect 函数: 第一个参数是一个函数,包含需要在每次渲染后执行的副作用代码。这个函数可以返回一个清理函数(cleanup function),用于在组件卸载时执行清理逻辑,类似于 componentWillUnmount。
  • 依赖项数组: 第二个参数是一个数组,包含影响副作用执行的变量。如果依赖项数组中的任何一个变量发生变化,useEffect 就会重新运行。如果省略依赖项数组,副作用将在每次组件渲染时都运行。
    以下是一些 useEffect 的常见用法:
  1. 只在组件挂载时执行副作用
useEffect(() => {// 执行副作用的代码return () => {// 在组件卸载前执行清理逻辑};
}, []);
  1. 在特定依赖项变化时执行副作用
useEffect(() => {// 执行副作用的代码return () => {// 在特定依赖项变化时执行清理逻辑};
}, [dependency1, dependency2]);
  1. 执行异步操作
useEffect(() => {const fetchData = async () => {try {// 异步操作,比如从 API 获取数据const result = await fetchDataFromApi();// 处理结果} catch (error) {// 处理错误}};fetchData();return () => {// 在组件卸载前执行清理逻辑};
}, [dependency]);

useEffect 的使用取决于具体的需求,可以根据需要执行副作用,并确保在组件卸载前进行必要的清理。

2.3 useContext

useContext 是 React Hooks 中用于访问 React 上下文的钩子。它允许你在函数组件中订阅 React 上下文的值,而无需使用 Context.Consumer

下面是 useContext 的基本用法:

  1. 创建上下文: 使用 React.createContext 创建一个上下文对象。
  2. 在顶层组件提供上下文的值: 使用 Context.Provider 在组件树的某个位置提供上下文的值。
  3. 在子组件中使用 useContext: 在需要访问上下文的子组件中使用 useContext 来获取上下文的值。

以下是一个简单的例子:

import React, { createContext, useContext } from 'react';// 创建一个上下文对象
const MyContext = createContext();// 在顶层组件提供上下文的值
function MyProvider({ children }) {const contextValue = 'Hello from Context';return (<MyContext.Provider value={contextValue}>{children}</MyContext.Provider>);
}// 在子组件中使用 useContext 获取上下文的值
function MyComponent() {const contextValue = useContext(MyContext);return <p>{contextValue}</p>;
}// 在应用的顶层组件中使用 MyProvider 包裹子组件
function App() {return (<MyProvider><MyComponent /></MyProvider>);
}export default App;

如果组件分别在不同的组件中, 则可以定义一个文件导出定义的 context:

import { createContext } from 'react';const MyContext = createContext();export default MyContext;

2.4 useReducer

useReducer 是 React Hooks 中用于管理复杂状态逻辑的钩子。它提供了一种可预测的方式来更新状态,尤其适用于处理具有多个可能操作的状态。使用 useReducer 时,你需要定义一个 reducer 函数,该函数负责处理不同的操作,并返回新的状态。

下面是 useReducer 的基本用法:

  1. 定义 reducer 函数: 创建一个接受当前状态和操作的函数,根据操作类型返回新的状态。reducer 函数的格式为 (state, action) => newState
  2. 使用 useReducer: 在组件中调用 useReducer 并传入 reducer 函数和初始状态。
  3. 得到当前状态和 dispatch 函数: useReducer 返回一个包含当前状态和 dispatch 函数的数组。
  4. dispatch 操作: 调用 dispatch 函数并传入一个操作对象,reducer 将根据操作类型来更新状态。
    以下是一个简单的例子:
import React, { useReducer } from 'react';// 定义 reducer 函数
const reducer = (state, action) => {switch (action.type) {case 'INCREMENT':return { count: state.count + 1 };case 'DECREMENT':return { count: state.count - 1 };default:return state;}
};// 使用 useReducer
function Counter() {const [state, dispatch] = useReducer(reducer, { count: 0 });return (<div><p>Count: {state.count}</p><button onClick={() => dispatch({ type: 'INCREMENT' })}>Increment</button><button onClick={() => dispatch({ type: 'DECREMENT' })}>Decrement</button></div>);
}export default Counter;

在上面的例子中,reducer 函数接收当前状态和操作,根据操作类型更新状态。useReducer 返回一个包含当前状态和 dispatch 函数的数组。通过调用 dispatch 函数,并传入包含 type 属性的操作对象,可以触发 reducer 来更新状态。

useReducer 还支持传入一个可选的初始化函数,用于计算初始状态,例如:

const initialState = { count: 0 };const init = (initialState) => {return { count: initialState.count * 2 };
};const [state, dispatch] = useReducer(reducer, initialState, init);

在这个例子中,init 函数接收初始状态,并返回实际的初始状态。这可以是有用的,例如在初始状态需要基于某些计算的情况下。

使用 useReducer 的主要优势在于它使得状态逻辑更加模块化,特别是当有多个操作可能影响状态时。

2.5 useCallback

useCallback 是 React Hooks 中用于记忆回调函数的钩子。它的主要作用是在依赖不变的情况下,返回一个记忆化的回调函数,避免在每次渲染时创建新的回调函数。这有助于优化性能,特别是在子组件中使用时。

基本的使用方式如下:

import React, { useCallback } from 'react';function MyComponent({ onClick }) {// 使用 useCallback 包裹回调函数const memoizedCallback = useCallback(() => {// 回调函数的逻辑console.log('Callback executed!');},// 依赖项数组[/* dependencies */]);return (<button onClick={memoizedCallback}>Click me</button>);
}export default MyComponent;

在上面的例子中,useCallback 接收两个参数:一个回调函数和一个依赖项数组。它返回一个记忆化后的回调函数 memoizedCallback。如果依赖项数组中的值没有发生变化,memoizedCallback 将保持相同的引用,从而避免在每次渲染时重新创建回调函数。

常见的用法包括:

  1. 避免子组件的不必要渲染: 在将回调函数传递给子组件时,使用 useCallback 避免子组件不必要地重新渲染。
const memoizedCallback = useCallback(() => {// 回调函数的逻辑},[/* dependencies */]
);return <ChildComponent onClick={memoizedCallback} />;
  1. 作为依赖项传递给其他 Hook: 在使用其他 Hook 时,将 useCallback 的记忆化回调函数作为依赖项传递。
useEffect(() => {// 使用 memoizedCallback 作为依赖项someHook(memoizedCallback);
}, [memoizedCallback]);
  1. 避免在依赖项变化时触发 effect: 在使用 useEffect 时,通过使用 useCallback 避免在依赖项变化时触发 effect。
useEffect(() => {// 在 memoizedCallback 变化时执行 effect
}, [memoizedCallback]);

需要注意的是,过度使用 useCallback 可能会导致性能问题,因为每个记忆化的回调函数都需要额外的内存。因此,只在确实有性能问题或需要时使用 useCallback

2.6 useMemo

useMemo 是 React Hooks 中用于记忆化计算结果的钩子。它接受一个计算函数和依赖项数组,并返回计算结果的记忆化版本。这有助于避免在每次渲染时重新计算耗时的操作,提高性能。

基本的使用方式如下:

import React, { useMemo } from 'react';function MyComponent({ data }) {// 使用 useMemo 记忆化计算结果const memoizedResult = useMemo(() => {// 计算结果的逻辑console.log('Computing result...');return data.filter(item => item > 5);},// 依赖项数组[data]);return (<div><p>Result: {memoizedResult}</p></div>);
}export default MyComponent;

在上面的例子中,useMemo 接收两个参数:一个计算函数和一个依赖项数组。它返回一个记忆化后的计算结果 memoizedResult。如果依赖项数组中的值没有发生变化memoizedResult 将保持相同的引用,从而避免在每次渲染时重新计算结果。

常见的用法包括:

  1. 优化渲染性能: 避免在每次渲染时都执行昂贵的计算,只在依赖项变化时重新计算。
const memoizedResult = useMemo(() => {// 昂贵的计算逻辑},[/* dependencies */]
);
  1. 记忆化函数: 当需要在每次渲染时都返回一个新的函数,但只有在依赖项变化时才创建新函数时,可以使用 useMemo 记忆化函数。
const memoizedFunction = useMemo(() => {return () => {// 函数的逻辑};},[/* dependencies */]
);
  1. 避免重复计算: 当某个计算结果仅在特定依赖项变化时才发生变化时,使用 useMemo 避免重复计算。
const memoizedResult = useMemo(() => {// 仅在特定依赖项变化时才计算结果},[specificDependency]
);

需要注意的是,过度使用 useMemo 可能会导致性能问题,因为每个记忆化的结果都需要额外的内存。因此,只在确实有性能问题或需要时使用 useMemo

相关文章:

React Native 从类组件到函数组件

1. 发展趋势 React Native社区中的趋势是朝向使用函数组件&#xff08;Functional Components&#xff09;和Hooks的方向发展&#xff0c;而不是使用类组件&#xff08;Class Components&#xff09;。 React Native自推出Hooks API以来&#xff0c;函数组件和Hooks的使用变得…...

Redis 快速搭建与使用

文章目录 1. Redis 特性1.1 多种数据类型支持1.2 功能完善1.3 高性能1.4 广泛的编程语言支持1.5 使用简单1.6 活跃性高/版本迭代快1.7 I/O 多路复用模型 2. Redis发展历程3. Redis 安装3.1 源码安装3.1.1 下载源码包3.1.2 解压安装包3.1.3 切换到 Redis 目录3.1.4 编译安装 3.2…...

SpringBoot集成etcd,实现实时监听,实现配置中心

etcd 是一个分布式键值对存储&#xff0c;设计用来可靠而快速的保存关键数据并提供访问。通过分布式锁&#xff0c;leader选举和写屏障(write barriers)来实现可靠的分布式协作。etcd集群是为高可用&#xff0c;持久性数据存储和检索而准备。 以下代码实现的主要业务是&#xf…...

JavaScript元素根据父级元素宽高缩放

/*** 等比缩放* param wrap 外部容器* param container 待缩放的容器* returns {{width: number, height: number}}* 返回值&#xff1a;width:宽度, height:高度*/aspectRatio(wrap: any, container: any) {// w h / ratio, h w * ratioconst wrapW wrap.width;const wrapH…...

易趋产品升级(EasyTrack 11_V1.3) | 集成飞书、WPS、个性化设置,增强团队协作和用户体验

企业在项目管理过程中&#xff0c;经常会遇到项目信息同步不及时、沟通障碍以及管理软件使用不便捷等难题&#xff0c;导致团队协作效率低下。这种情况下&#xff0c;如果使用了多个办公软件&#xff08;如&#xff1a;钉钉、企业微信、项目管理软件等&#xff09;&#xff0c;…...

帆软FineBi V6版本经验总结

帆软FineBi V6版本经验总结 BI分析出现背景 ​ 现在是一个大数据的时代&#xff0c;每时每刻都有海量的明细数据出现。这时大数据时代用户思维是&#xff1a;1、数据的爆炸式增长&#xff0c;人们比起明细数据&#xff0c;更在意样本的整体特征、相互关系。2、基于明细的“小…...

03.MySQL的体系架构

MySQL的体系架构 一、MySQL简介二、MySQL的体系架构三、MySQL的内存结构四、MySQL的文件结构 一、MySQL简介 MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典MySQL AB公司开发&#xff0c;后被Sun公司收购&#xff0c;Sun公司被Oracle…...

随笔笔记-2023

随笔 computed 是基于他们的依赖进行缓存的&#xff0c;。如果要随时计算 new Date().now&#xff08;因为不是响应式的&#xff09;,那么需要用 computed。 如果不希望用缓存那么就用 methods 字符与字节 1 字节8 位1B8 bit;1KB 1024B,1MB1024KB1024*1024B 编码&#xff1a;…...

2023.12.31 Python 词频统计

练习&#xff1a;使用Python中的filter、map、reduce实现词频统计 样例数据&#xff1a; hello world java python java java hadoop spark spark python 需求分析&#xff1a; 1- 文件中有如上的示例数据 2- 读取文件内容。可以通过readline() 3- 将一行内容切分得到多个单…...

day12--java高级编程:网络通讯

5 Day19–网络通信(Socket通信) 说明&#xff1a; io流是跟本地的文件进行数据的传输&#xff0c;读或者写。网络通信&#xff1a;数据在网络中进行的传输。 本章专题与脉络 1. 网络编程概述 Java是 Internet 上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&…...

MongoDB聚合:$out

$out阶段将聚合管道产生的文档写入到指定的集合&#xff0c;从MongoDB4.4开始&#xff0c;支持指定数据库。$out阶段必须放在聚合管道的最后&#xff0c;支持聚合结果任意大小的数据集。 警告&#xff1a; 如果指定的集合已经存在则会被替换。 语法 用法 1&#xff1a; 定数…...

一次奇葩的spin_lock_irq / spin_unlock_irq使用不当导致的系统卡死分析

这是在调试内核block层时遇到的一例奇葩的soft lock锁死问题(内核版本centos 8.3&#xff0c;4.18.0-240)&#xff0c;现场如下&#xff1a; [ 760.247152] watchdog: BUG: soft lockup - CPU#0 stuck for 23s! [kworker/0:1:2635]……………..[ 760.247184] CPU: 0 PID: 26…...

公司创建百度百科需要哪些内容?

一个公司或是一个品牌想要让自己更有身份&#xff0c;更有知名度&#xff0c;更有含金量&#xff0c;百度百科词条是必不可少的。通过百度百科展示公司的详细信息&#xff0c;有助于增强用户对公司的信任感&#xff0c;提高企业形象。通过百度百科展示公司的发展历程、领导团队…...

qt中信号槽第五个参数

文章目录 connent函数第五个参数的作用自动连接(Qt::AutoConnection)直接连接(Qt::DirectConnection - 同步)同线程不同线程 队列连接(Qt::QueuedConnection - 异步)同一线程不同线程 锁定队列连接(Qt::BlockingQueuedConnection) connent函数第五个参数的作用 connect(const …...

模式识别与机器学习-SVM(线性支持向量机)

线性支持向量机 线性支持向量机间隔距离学习的对偶算法算法:线性可分支持向量机学习算法线性可分支持向量机例子 谨以此博客作为复习期间的记录 线性支持向量机 在以上四条线中&#xff0c;都可以作为分割平面&#xff0c;误差率也都为0。但是那个分割平面效果更好呢&#xff1…...

【并行计算】GPU,CUDA

一、CUDA层次结构 1.kernel核函数 一个CUDA程序是一个kernel核函数被GPU的多个计算单元并行执行的过程&#xff0c;CUDA给了如下抽象 dim3 threadsPerBlock(4, 3, 1); dim3 numBlocks(3, 2, 1); matrixAdd<<<numBlocks, threadsPerBlock>>>(A, B, C); 2.G…...

计算机网络教案——计算机网络设备章节

第五章 计算机网络设备 一、教学目标: 1. 了解计算机网络的主要设备 2. 了解计算机网络设备的主要原理 3. 掌握计算机网络设备的基本用途 4. 掌握计算机网络设备的使用常识 二、教学重点、难点 计算机网络设备的主要原理 三、技能培训重点、难点 计算机网络设备的使用…...

什么是SLAM中的回环检测,如果没有回环检测会怎样

目录 什么是回环检测 如果没有回环检测 SLAM&#xff08;Simultaneous Localization and Mapping&#xff0c;即同时定位与地图构建&#xff09;是一种使机器人或自动驾驶汽车能够在未知环境中建立地图的同时定位自身位置的技术。回环检测&#xff08;Loop Closure Detectio…...

ubuntu 通过文件设置静态IP、DNS、网关

1. 确定网络接口名称 首先&#xff0c;使用 ip a 命令确定您要配置的网络接口名称。 2. 编辑 Netplan 配置文件 使用文本编辑器&#xff08;如 nano&#xff09;打开或创建 Netplan 配置文件&#xff1a; sudo nano /etc/netplan/01-netcfg.yaml3. 输入 Netplan 配置 在编…...

mapboxgl 中热力图的实现以及给热力图点增加鼠标移上 popup 效果

文章目录 概要效果预览技术思路技术细节小结 概要 本篇文章还是关于最近做到的 mapboxgl 地图展开的。 借鉴官方示例&#xff1a;https://iclient.supermap.io/examples/mapboxgl/editor.html#heatMapLayer 效果预览 技术思路 将接口数据渲染到地图中形成热力图。还需要将热…...

golang并发安全-sync.map

sync.map解决的问题 golang 原生map是存在并发读写的问题&#xff0c;在并发读写时候会抛出异常 func main() {mT : make(map[int]int)g1 : []int{1, 2, 3, 4, 5, 6}g2 : []int{4, 5, 6, 7, 8, 9}go func() {for i : range g1 {mT[i] i}}()go func() {for i : range g2 {mT[…...

开发第一个SpringBoot程序

使用命令创建Maven工程 mvn archetype:generate -DgroupIdorg.sang -DartifactIdchapter01 -DarchetypeArtifactIdmaven-archetype-quickstart -DinteractiveModefalse 参数说明&#xff1a; -DgroupId 组织Id&#xff08;项目包名&#xff09; -DartifactId 项目名称或模块…...

2023年度总结—你是你的年度MVP吗?

这段年度总结其实我之前就想写了&#xff0c;大概就是市赛比完之后18号的样子把&#xff0c;但是因为太懒了就一直拖到了现在哈哈&#xff0c;我思来想去&#xff0c;翻来覆去&#xff0c;彻夜难眠&#xff0c;想了想&#xff0c;还是决定把它写了吧&#xff01;毕竟&#xff0…...

Linux基础知识学习3

vim编辑器 其分为四种模式 1.普通(命令)模式 2.编辑模式 3.底栏模式 4.可视化模式 vim编辑器被称为编辑器之神&#xff0c;而Emacs更是神之编辑器 普通模式&#xff1a; 1.光标移动 ^ 移动到行首 w 跳到下一个单词的开头…...

Leetcode5-在长度2N的数组中找出重复N次的元素(961)

1、题目 给你一个整数数组 nums &#xff0c;该数组具有以下属性&#xff1a; nums.length 2 * n. nums 包含 n 1 个 不同的 元素 nums 中恰有一个元素重复 n 次 找出并返回重复了 n 次的那个元素。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,3] 输出&#xff1a…...

openssl的 openssl.cnf配置文件详解

背景&#xff1a;在上一篇文中&#xff0c;提到要写一篇openssl 配置文件详解的&#xff0c;这就来了~~~ find / -name openssl.cnf /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf&#xff0c;该文件主要设置了证书请求、签名、crl相关的配置。主要相关的伪命令为ca和req…...

SpringBoot集成支付宝,看这一篇就够了。

前 言 在开始集成支付宝支付之前&#xff0c;我们需要准备一个支付宝商家账户&#xff0c;如果是个人开发者&#xff0c;可以通过注册公司或者让有公司资质的单位进行授权&#xff0c;后续在集成相关API的时候需要提供这些信息。 下面我以电脑网页端在线支付为例&#xff0c;介…...

数据结构程序设计——哈希表的应用(2)->哈希表解决冲突的方法

目录 实验须知 代码实现 实验报告 一&#xff1a;问题分析 二、数据结构 1.逻辑结构 2.物理结构 三、算法 &#xff08;一&#xff09;主要算法描述 1.用除留余数法构造哈希函数 2.线性探测再散列法 &#xff08;一&#xff09;主要算法实现代码 四、上机调试 实…...

微信小程序开发系列-07组件

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》《微信小程序开发系列-02注册小程序》《微信小程序开发系列-03全局配置中的“window”和“tabBar”》《微信小程序开发系列-04获取用户图像和昵称》《微信小程序开发系列-05登录小程序》《微信小程序…...

JavaScript 中 Set 和 Map 的区别

JavaScript 中的 Set 和 Map 都是用来存储数据的数据结构&#xff0c;它们之间的区别如下&#xff1a; Set 是一组唯一值的集合&#xff0c;而 Map 是一组键值对的集合。Set 中的值是唯一的&#xff0c;不允许重复&#xff1b;Map 中的键是唯一的&#xff0c;值可以重复。Set …...

web前端之JavaScript

MENU JavaScript之设计模式、单例、代理、装饰者、中介者、观察者、发布订阅、策略JavaScript之数组静态方法的实现、reduce、forEach、map、push、every JavaScript之设计模式、单例、代理、装饰者、中介者、观察者、发布订阅、策略 单例模式 概念 保证一个类仅有一个实例&am…...

C# 图标标注小工具-查看重复文件

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Windows.Forms;namespace ImageDuplicate {public partial clas…...

浅谈冯诺依曼体系和操作系统

&#x1f30e;冯诺依曼体系结构 文章目录 冯诺依曼体系结构 认识冯诺依曼体系结构       硬件分类       各个硬件的简单认识         输入输出设备         中央处理器         存储器 关于内存 对冯诺依曼体系的理解 操作系统 操作系统…...

Good Bye 2023

Good Bye 2023 Good Bye 2023 A. 2023 题意&#xff1a;序列a中所有数的乘积应为2023&#xff0c;现在给出序列中的n个数&#xff0c;找到剩下的k个数并输出&#xff0c;报告不可能。 思路&#xff1a;把所有已知的数字乘起来&#xff0c;判断是否整除2023&#xff0c;不够…...

多开工具对手机应用响应速度的优化与改进

多开工具对手机应用响应速度的优化与改进 摘要&#xff1a; 如今&#xff0c;手机应用的多样化和个性化需求不断增长&#xff0c;用户对应用的响应速度要求也越来越高。为了满足用户的需求&#xff0c;开发者们使用了多种技术手段进行应用的优化和改进。其中&#xff0c;多开工…...

文件批量整理,文件归类整理,文件批量归类

我们每天都要面对无数的文件&#xff0c;从工作报告、个人照片到电影和音乐。如何有效地管理和归类这些文件&#xff0c;成为了我们日常生活和工作中所要处理的。今天&#xff0c;小编就给大家介绍一款简单易用的工具——文件批量改名高手&#xff0c;助你轻松实现文件批量归类…...

Python+Django+Mysql+SimpleUI搭建后端用户管理系统(非常详细,每一步都清晰,列举了里面所有使用的方法属性)

一、在Anaconda环境下创建虚拟环境 &#xff08;1&#xff09;打开Anaconda Prompt(install)&#xff0c;创建虚拟环境&#xff0c;如下图所示&#xff1a; 方法一&#xff1a;默认情况下虚拟环境创建在Anaconda安装目录下的envs文件夹中 conda create --name usermanage …...

【Qt-QWidget-QLabel-QFrame-QSlider-View-Bar】

Qt编程指南 ■ Label■ QLabel■ QMovie 显示动画■ Widget■ QWidget■ QTabWidget■ QTableWidget■ QListWidget■ QStackedWidget■ QCalendarWidget■ QFrame■ QFrame■ View■ QT...

11|代理(上):ReAct框架,推理与行动的协同

11&#xff5c;代理&#xff08;上&#xff09;&#xff1a;ReAct框架&#xff0c;推理与行动的协同 在之前介绍的思维链&#xff08;CoT&#xff09;中&#xff0c;我向你展示了 LLMs 执行推理轨迹的能力。在给出答案之前&#xff0c;大模型通过中间推理步骤&#xff08;尤其…...

毫秒格式化

## 计算当前毫秒数&#xff1a; const [start,setStart] useState(new Date().getTime())useEffect(()>{setInterval(()>{setCurrMill(new Date().getTime()-start)},1)},[]) ## 格式化毫秒 function formatMilliseconds(milliseconds) {const totalSeconds Math.flo…...

pytorch与cuda版本对应关系汇总

pytorch与cuda版本关系 cuda版本支持pytorch版本cuda10.21.5 ~ 1.12cuda11.01.7 ~ 1.7.1cuda11.11.8 ~ 1.10.1cuda11.31.8.1 ~ 1.12.1cuda11.61.12.0 ~ 1.13.1cuda11.71.13.0 ~ 2.0.1cuda11.82.0.0 ~ 2.1.1cuda12.12.1.0 ~ 2.1.1 cuda 与 cudnn关系 cuda版本支持cudnn版本cu…...

Linux系统下隧道代理HTTP

在Linux系统下配置隧道代理HTTP是一个涉及网络技术的话题&#xff0c;主要目的是在客户端和服务器之间建立一个安全的通信通道。下面将详细解释如何进行配置。 一、了解基本概念 在开始之前&#xff0c;需要了解几个关键概念&#xff1a;代理服务器、隧道代理和HTTP协议。代理…...

unity学习笔记----游戏练习03

一、修复植物种植的问题 1.当手上存在植物时&#xff0c;再次点击卡片上的植物就会在手上添加新的植物&#xff0c;需要修改成只有手上没有植物时才能再次获取到植物。需要修改AddPlant方法。 public bool AddPlant(PlantType plantType) { //防止手上出现多个植…...

VistualStudio查看类图UML

点击菜单栏中的工具–》获取工具和功能。 然后在资源管理器中对应的代码中鼠标右键选择查看类图 生成一个ClassDiagram.cd文件就是类图的文件了。 根据需要拖拽就可以生成类图了。...

elasticsearch系列九:异地容灾-CCR跨集群复制

概述 起初只在部分业务中采用es存储数据&#xff0c;在主中心搭建了个集群&#xff0c;随着es在我们系统中的地位越来越重要&#xff0c;数据也越来越多&#xff0c;针对它的安全性问题也越发重要&#xff0c;那如何对es做异地容灾呢&#xff1f; 今天咱们就一起看下官方提供的…...

基于Java网上点餐系统设计与实现

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…...

公司电脑文件加密系统——防止内部核心文件数据 | 资料外泄,自动智能透明加密保护

一套从源头上保障企业电脑数据安全和电脑使用安全的加密软件。天锐绿盾加密软件包含了表格数据加密、图纸加密、文档文件加密、内网文件加密流转、密级管控、电脑离线管理、文件外发管理、灵活的审批流程、工作模式切换、服务器白名单等功能。天锐绿盾加密系统全面覆盖Mac、Win…...

计算机毕业设计------ssm茶叶溯源系统

项目介绍 茶叶溯源系统&#xff0c;分为前台与后台。普通用户可在前台通过18位的编码查询茶叶的出售历史。 后台分为两种角色&#xff0c;管理员与经销商&#xff1b; 管理员主要功能包括&#xff1a; 主界面&#xff1b; 管理员管理&#xff1a;管理员列表、添加管理员&am…...

【网络安全 | Misc】miss_01 太湖杯

解压时提示输入密码&#xff1a; 如果 frFlags 或 deFlags 不为0会导致zip的伪加密 将deFlags的值修改为0 将9改为0&#xff0c;另存为123.zip&#xff1a; 即可绕过加密&#xff1a; 得到一个zip一个docx&#xff0c;但zip需要密码&#xff1a; 因此看docx有无敏感信息&#x…...

【深度学习目标检测】十一、基于深度学习的电网绝缘子缺陷识别(python,目标检测,yolov8)

YOLOv8是一种物体检测算法&#xff0c;是YOLO系列算法的最新版本。 YOLO&#xff08;You Only Look Once&#xff09;是一种实时物体检测算法&#xff0c;其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化&#xff0c;提高了检测速度和准确性。…...