什么是 ahooks?

ahooks 是一个 React Hooks 库,提供了大量实用的自定义 hooks,帮助开发者更高效地构建 React 应用。其中 DOM 类 hooks 是 ahooks 的一个重要分类,专门用于处理 DOM 相关操作,如事件监听、元素状态、拖拽等。

安装 ahooks

npm install ahooks

DOM 类 hooks 详解

useEventListener – 事件监听器

useEventListener 用于添加事件监听器。

import React, { useState, useRef } from "react";
import { useEventListener } from "ahooks";
import { Card, Button } from "antd";const UseEventListenerExample = () => {const [count, setCount] = useState(0);const buttonRef = useRef(null);useEventListener("click",() => {setCount((prev) => prev + 1);},{ target: buttonRef });return (<Card title="useEventListener 事件监听器"><div style={{ marginBottom: 16 }}><p><strong>点击次数:</strong> {count}</p></div><Button ref={buttonRef}>点击我增加计数</Button></Card>);
};

useClickAway – 点击外部

useClickAway 用于检测点击元素外部的事件。

import { useClickAway } from "ahooks";
import { useRef, useState } from "react";function Dropdown() {const [visible, setVisible] = useState(false);const ref = useRef();useClickAway(() => {setVisible(false);}, ref);return (<div ref={ref} style={{ position: "relative" }}><button onClick={() => setVisible(!visible)}>下拉菜单</button>{visible && (<divstyle={{position: "absolute",top: "100%",border: "1px solid #ccc",}}><div>菜单项 1</div><div>菜单项 2</div><div>菜单项 3</div></div>)}</div>);
}

useDocumentVisibility – 文档可见性

useDocumentVisibility 用于监听文档可见性状态。

import React from "react";
import { useDocumentVisibility } from "ahooks";
import { Card } from "antd";const UseDocumentVisibilityExample = () => {const documentVisibility = useDocumentVisibility();return (<Card title="useDocumentVisibility 文档可见性"><div style={{ marginBottom: 16 }}><p><strong>当前状态:</strong> {documentVisibility}</p><p style={{ fontSize: "12px", color: "#666" }}>切换标签页或最小化窗口查看状态变化</p></div></Card>);
};

useDrop & useDrag – 拖拽

useDrop 和 useDrag 用于处理拖拽操作。

import React, { useState } from "react";
import { useDrop, useDrag } from "ahooks";
import { Card } from "antd";const UseDropDragExample = () => {const [isOver, setIsOver] = useState(false);const [isDragging, setIsDragging] = useState(false);const dropRef = useDrop({onDom: (content) => {console.log("拖拽内容:", content);setIsOver(false);},onDragEnter: () => setIsOver(true),onDragLeave: () => setIsOver(false),});const dragRef = useDrag({onDragStart: () => setIsDragging(true),onDragEnd: () => setIsDragging(false),});return (<Card title="useDrop & useDrag 拖拽"><div style={{ display: "flex", gap: 16 }}><divref={dragRef}draggableonDragStart={(e) => {e.dataTransfer.setData("text/plain", "拖拽的内容");setIsDragging(true);}}onDragEnd={() => setIsDragging(false)}style={{padding: 16,backgroundColor: isDragging ? "#e6f7ff" : "#f0f0f0",border: "2px dashed #d9d9d9",borderRadius: 4,cursor: "move",userSelect: "none",}}>拖拽我</div><divref={dropRef}onDragOver={(e) => e.preventDefault()}onDrop={(e) => {e.preventDefault();const data = e.dataTransfer.getData("text/plain");console.log("放置的内容:", data);setIsOver(false);}}onDragEnter={(e) => {e.preventDefault();setIsOver(true);}}onDragLeave={(e) => {e.preventDefault();setIsOver(false);}}style={{padding: 16,backgroundColor: isOver ? "#f6ffed" : "#f0f0f0",border: "2px dashed #d9d9d9",borderRadius: 4,minHeight: 60,}}>放置区域</div></div></Card>);
};

useEventTarget – 事件目标

useEventTarget 用于处理表单输入事件。

import React from "react";
import { useEventTarget } from "ahooks";
import { Card, Input, Button } from "antd";const UseEventTargetExample = () => {const [value, { onChange, reset }] = useEventTarget({initialValue: "",});return (<Card title="useEventTarget 事件目标"><div style={{ marginBottom: 16 }}><Inputvalue={value}onChange={onChange}placeholder="输入内容"style={{ marginBottom: 8 }}/><p><strong>当前值:</strong> {value}</p></div><Button onClick={reset}>重置</Button></Card>);
};

useExternal – 外部资源

useExternal 用于动态加载外部资源。

import React, { useState } from "react";
import { useExternal } from "ahooks";
import { Card, Button } from "antd";const UseExternalExample = () => {const [path, setPath] = useState("");const status = useExternal(path);return (<Card title="useExternal 外部资源"><div style={{ marginBottom: 16 }}><p><strong>状态:</strong> <b>{status}</b></p><p style={{ fontSize: "12px", color: "#666" }}>加载 Bootstrap CSS 查看徽章样式效果</p></div><div style={{ marginBottom: 16 }}><divclassName="bd-example flex gap-2"style={{ wordBreak: "break-word" }}><span className="badge bg-primary">Primary</span><span className="badge bg-secondary">Secondary</span><span className="badge bg-success">Success</span><span className="badge bg-danger">Danger</span><span className="badge bg-warning text-dark">Warning</span><span className="badge bg-info text-dark">Info</span><span className="badge bg-light text-dark">Light</span><span className="badge bg-dark">Dark</span></div></div><div><ButtononClick={() =>setPath("https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css")}style={{ marginRight: 8 }}>加载 Bootstrap CSS</Button><Button onClick={() => setPath("")}>卸载</Button></div></Card>);
};

useTitle – 页面标题

useTitle 用于动态设置页面标题。

import React, { useState } from "react";
import { useTitle } from "ahooks";
import { Card, Input, Button } from "antd";const UseTitleExample = () => {const [title, setTitle] = useState("ahooks 示例");useTitle(title);return (<Card title="useTitle 页面标题"><div style={{ marginBottom: 16 }}><Inputvalue={title}onChange={(e) => setTitle(e.target.value)}placeholder="输入页面标题"style={{ marginBottom: 8 }}/><p><strong>当前标题:</strong> {title}</p></div><Button onClick={() => setTitle("ahooks 示例")}>重置标题</Button></Card>);
};

useFavicon – 网站图标

useFavicon 用于动态设置网站图标。

import React, { useState } from "react";
import { useFavicon } from "ahooks";
import { Card, Button } from "antd";const UseFaviconExample = () => {const [favicon, setFavicon] = useState("https://ahooks.js.org/favicon.ico");useFavicon(favicon);return (<Card title="useFavicon 网站图标"><div style={{ marginBottom: 16 }}><p><strong>当前图标:</strong> {favicon}</p><p style={{ fontSize: "12px", color: "#666" }}>查看浏览器标签页图标变化</p></div><div><ButtononClick={() => setFavicon("https://www.google.com/favicon.ico")}style={{ marginRight: 8 }}>设置为 Google 图标</Button><Button onClick={() => setFavicon("https://ahooks.js.org/favicon.ico")}>恢复默认</Button></div></Card>);
};

useFullscreen – 全屏

useFullscreen 用于控制全屏状态。

import React, { useRef } from "react";
import { useFullscreen } from "ahooks";
import { Card, Button } from "antd";const UseFullscreenExample = () => {const ref = useRef(null);const [isFullscreen, { enterFullscreen, exitFullscreen, toggleFullscreen }] =useFullscreen(ref);return (<Card title="useFullscreen 全屏"><div style={{ marginBottom: 16 }}><p><strong>全屏状态:</strong> {isFullscreen ? "是" : "否"}</p></div><divref={ref}style={{padding: 16,backgroundColor: "#f0f0f0",border: "1px solid #d9d9d9",borderRadius: 4,marginBottom: 16,}}>这个区域可以全屏显示</div><div><Button onClick={enterFullscreen} style={{ marginRight: 8 }}>进入全屏</Button><Button onClick={exitFullscreen} style={{ marginRight: 8 }}>退出全屏</Button><Button onClick={toggleFullscreen}>切换全屏</Button></div></Card>);
};

useHover – 悬停状态

useHover 用于检测元素悬停状态。

import React, { useRef } from "react";
import { useHover } from "ahooks";
import { Card } from "antd";const UseHoverExample = () => {const ref = useRef(null);const isHovering = useHover(ref);return (<Card title="useHover 悬停状态"><div style={{ marginBottom: 16 }}><p><strong>悬停状态:</strong> {isHovering ? "悬停中" : "未悬停"}</p></div><divref={ref}style={{padding: 16,backgroundColor: isHovering ? "#e6f7ff" : "#f0f0f0",border: "1px solid #d9d9d9",borderRadius: 4,transition: "background-color 0.3s",}}>鼠标悬停我</div></Card>);
};

useMutationObserver – 元素变化监听

useMutationObserver 用于监听 DOM 元素变化。

import React, { useState, useRef, useCallback } from "react";
import { useMutationObserver } from "ahooks";
import { Card, Button } from "antd";const UseMutationObserverExample = () => {const [changeCount, setChangeCount] = useState(0);const ref = useRef(null);const handleMutation = useCallback((mutationsList) => {mutationsList.forEach(() => setChangeCount((c) => c + 1));}, []);useMutationObserver(handleMutation, ref, {attributes: true,childList: true,subtree: true,});const addElement = () => {const div = document.createElement("div");div.textContent = "新元素";ref.current?.appendChild(div);};const changeAttribute = () => {if (ref.current) {ref.current.style.backgroundColor = "#e6f7ff";}};return (<Card title="useMutationObserver 元素变化监听"><div style={{ marginBottom: 16 }}><p><strong>变化次数:</strong> {changeCount}</p></div><divref={ref}style={{padding: 16,backgroundColor: "#f0f0f0",border: "1px solid #d9d9d9",borderRadius: 4,marginBottom: 16,minHeight: 60,}}>监听区域</div><div><Button onClick={addElement} style={{ marginRight: 8 }}>添加元素</Button><Button onClick={changeAttribute}>改变属性</Button></div></Card>);
};

useInViewport – 视口可见性

useInViewport 用于检测元素是否在视口中可见。

import React, { useRef } from "react";
import { useInViewport } from "ahooks";
import { Card } from "antd";const UseInViewportExample = () => {const ref = useRef(null);const [inViewport] = useInViewport(ref);return (<Card title="useInViewport 视口可见性"><div style={{ marginBottom: 16 }}><p><strong>可见状态:</strong> {inViewport ? "可见" : "不可见"}</p></div><divstyle={{ height: 200, overflow: "auto", border: "1px solid #d9d9d9" }}><div style={{ height: 100, backgroundColor: "#f0f0f0" }}>滚动区域顶部</div><divref={ref}style={{padding: 16,backgroundColor: inViewport ? "#f6ffed" : "#fff2e8",border: "1px solid #d9d9d9",borderRadius: 4,margin: 16,}}>监听可见性的元素</div><div style={{ height: 300, backgroundColor: "#f0f0f0" }}>滚动区域底部</div></div></Card>);
};

useKeyPress – 键盘按键

useKeyPress 用于监听键盘按键事件。

import React, { useState } from "react";
import { useKeyPress } from "ahooks";
import { Card } from "antd";const UseKeyPressExample = () => {const [pressedKey, setPressedKey] = useState("");useKeyPress(["a", "b", "c"], (event) => {setPressedKey(event.key);});return (<Card title="useKeyPress 键盘按键"><div style={{ marginBottom: 16 }}><p><strong>按下的键:</strong> {pressedKey || "无"}</p><p style={{ fontSize: "12px", color: "#666" }}>按下 A、B、C 键查看效果</p></div></Card>);
};

useLongPress – 长按

useLongPress 用于检测长按事件。

import React, { useState } from "react";
import { useLongPress } from "ahooks";
import { Card } from "antd";const UseLongPressExample = () => {const [message, setMessage] = useState("");const longPress = useLongPress(() => {setMessage("长按触发");},{onCancel: () => {setMessage("长按取消");},},{delay: 1000,});return (<Card title="useLongPress 长按"><div style={{ marginBottom: 16 }}><p><strong>状态:</strong> {message || "等待长按"}</p></div><div{...longPress}style={{padding: 16,backgroundColor: "#f0f0f0",border: "1px solid #d9d9d9",borderRadius: 4,cursor: "pointer",userSelect: "none",}}>长按我 1 秒</div></Card>);
};

useMouse – 鼠标位置

useMouse 用于获取鼠标位置。

import React from "react";
import { useMouse } from "ahooks";
import { Card } from "antd";const UseMouseExample = () => {const mouse = useMouse();return (<Card title="useMouse 鼠标位置"><div style={{ marginBottom: 16 }}><p><strong>X 坐标:</strong> {mouse.clientX}</p><p><strong>Y 坐标:</strong> {mouse.clientY}</p><p><strong>屏幕 X:</strong> {mouse.screenX}</p><p><strong>屏幕 Y:</strong> {mouse.screenY}</p></div><div style={{ fontSize: "12px", color: "#666" }}>移动鼠标查看坐标变化</div></Card>);
};

useResponsive – 响应式

useResponsive 用于检测屏幕尺寸。

import React from "react";
import { configResponsive, useResponsive } from "ahooks";
import { Card } from "antd";configResponsive({small: 0,middle: 800,large: 1200,
});const UseResponsiveExample = () => {const responsive = useResponsive();return (<Card title="useResponsive 响应式"><div style={{ marginBottom: 16 }}><p>请调整浏览器窗口宽度查看效果:</p>{Object.keys(responsive).map((key) => (<p key={key}><strong>{key}:</strong> {responsive[key] ? "✔" : "✘"}</p>))}</div><div style={{ fontSize: "12px", color: "#666" }}>断点配置: small(0px) | middle(800px) | large(1200px)</div></Card>);
};

useScroll – 滚动

useScroll 用于监听滚动事件。

import React, { useRef } from "react";
import { useScroll } from "ahooks";
import { Card } from "antd";const UseScrollExample = () => {const ref = useRef(null);const scroll = useScroll(ref);return (<Card title="useScroll 滚动"><div style={{ marginBottom: 16 }}><p><strong>滚动位置:</strong> {scroll?.top || 0}</p><p><strong>滚动方向:</strong> {scroll?.direction || "无"}</p></div><divref={ref}style={{height: 200,overflow: "auto",border: "1px solid #d9d9d9",padding: 16,}}>{Array.from({ length: 20 }, (_, i) => (<divkey={i}style={{ padding: 8, borderBottom: "1px solid #f0f0f0" }}>滚动内容 {i + 1}</div>))}</div></Card>);
};

useSize – 元素尺寸

useSize 用于监听元素尺寸变化。

import React, { useRef } from "react";
import { useSize } from "ahooks";
import { Card, Button } from "antd";const UseSizeExample = () => {const ref = useRef(null);const size = useSize(ref);const toggleSize = () => {if (ref.current) {ref.current.style.width =ref.current.style.width === "200px" ? "300px" : "200px";ref.current.style.height =ref.current.style.height === "100px" ? "150px" : "100px";}};return (<Card title="useSize 元素尺寸"><div style={{ marginBottom: 16 }}><p><strong>宽度:</strong> {size?.width}px</p><p><strong>高度:</strong> {size?.height}px</p></div><divref={ref}style={{width: 200,height: 100,backgroundColor: "#f0f0f0",border: "1px solid #d9d9d9",borderRadius: 4,marginBottom: 16,transition: "all 0.3s",}}>监听尺寸的元素</div><Button onClick={toggleSize}>切换尺寸</Button></Card>);
};

useFocusWithin – 焦点状态

useFocusWithin 用于检测元素或其子元素是否获得焦点。

import React, { useRef } from "react";
import { useFocusWithin } from "ahooks";
import { Card, Input, Button, message } from "antd";const UseFocusWithinExample = () => {const ref = useRef(null);const isFocusWithin = useFocusWithin(ref, {onFocus: () => {message.info("获得焦点");},onBlur: () => {message.info("失去焦点");},});return (<Card title="useFocusWithin 焦点状态"><div style={{ marginBottom: 16 }}><p><strong>焦点状态:</strong> {JSON.stringify(isFocusWithin)}</p></div><divref={ref}style={{padding: 16,backgroundColor: isFocusWithin ? "#f6ffed" : "#f0f0f0",border: "1px solid #d9d9d9",borderRadius: 4,transition: "background-color 0.3s",}}><Input placeholder="点击我" style={{ marginBottom: 8 }} /><Button>按钮</Button></div></Card>);
};

DOM 类 hooks 速查表

Hook 名称用途描述
useEventListener事件监听器添加事件监听器
useClickAway点击外部检测点击元素外部的事件
useDocumentVisibility文档可见性监听文档可见性状态
useDrop & useDrag拖拽处理拖拽操作
useEventTarget事件目标处理表单输入事件
useExternal外部资源动态加载外部资源
useTitle页面标题动态设置页面标题
useFavicon网站图标动态设置网站图标
useFullscreen全屏控制全屏状态
useHover悬停状态检测元素悬停状态
useMutationObserver元素变化监听监听 DOM 元素变化
useInViewport视口可见性检测元素是否在视口中可见
useKeyPress键盘按键监听键盘按键事件
useLongPress长按检测长按事件
useMouse鼠标位置获取鼠标位置
useResponsive响应式检测屏幕尺寸
useScroll滚动监听滚动事件
useSize元素尺寸监听元素尺寸变化
useFocusWithin焦点状态检测元素或其子元素是否获得焦点

 React强大且灵活hooks库——ahooks入门实践之DOM类hook(dom)详解 - 高质量源码分享平台-免费下载各类网站源码与模板及前沿动态资讯

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

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

相关文章

GeoTools 工厂设计模式

前言使用GeoTools开发时有必要了解其工厂设计模式&#xff0c;作为软件开发核心设计模式&#xff0c;其设计思想具有普遍性和研究性。明白方法原理有助于提高开发效率&#xff0c;达到事半功倍的效果。1. 工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是面向对象中…

npu-smi info命令参数解释

华为昇腾npu-smi显示npu-smi工具的帮助信息npu-smi -h字段说明-h命令的帮助信息–help命令的帮助信息-vnpu-smi版本信息info显示硬件详细信息set修改设备配置属性clear清除设备信息upgrade升级MCU固件 npu-smi info 用于监控和管理华为NPU的状态和性能字段值说明npu-smi24.1.rc…

OneCode3.0 通信架构简介——MCPServer微内核设计哲学与实现

在数字化转型加速的今天&#xff0c;低代码平台已成为企业快速交付应用的核心基础设施。然而&#xff0c;通用消息中间件与低代码开发范式之间存在难以调和的矛盾&#xff1a;标准化协议无法匹配可视化编排的动态性&#xff0c;通用架构难以满足低代码场景下高频短消息的性能需…

Android14 Launcher3 修改All App上下滑动头部显示阴影

正常情况下的样子&#xff1a; 下拉App抽屉后的样子&#xff1a;修改方案&#xff1a;qssi14/packages/apps/Launcher3/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.javaprotected void updateHeaderScroll(int scrolledOffset) {float prog1 Utilities…

Zookeeper入门安装与使用详解

文章目录一、简介二、下载安装1、安装jdk2、windows&#xff08;1&#xff09;下载&#xff08;2&#xff09;配置与启动一、简介 略。 二、下载安装 1、安装jdk 安装jdk8&#xff0c;高版本可能会有问题。 2、windows &#xff08;1&#xff09;下载 官网地址&#xff…

设计模式之适配器模式:让不兼容的接口协同工作的艺术

适配器模式&#xff1a;让不兼容的接口协同工作的艺术在软件开发中&#xff0c;我们经常会遇到系统整合的挑战——如何让新旧组件协同工作&#xff1f;适配器模式正是解决这类接口不兼容问题的利器&#xff0c;本文将深入探讨这一经典设计模式。1. 引言&#xff1a;接口不兼容的…

AI驱动的软件工程(中):文档驱动的编码与执行

&#x1f4da; 系列文章导航 AI驱动的软件工程&#xff08;上&#xff09;&#xff1a;人机协同的设计与建模 AI驱动的软件工程&#xff08;中&#xff09;&#xff1a;文档驱动的编码与执行 AI驱动的软件工程&#xff08;下&#xff09;&#xff1a;AI辅助的质检与交付 大家好…

HTML应用指南:利用GET请求获取河南省胖东来超市门店位置信息

胖东来作为中国知名的零售企业&#xff0c;自1995年成立以来&#xff0c;始终致力于为消费者提供丰富、新鲜的商品选择与优质的购物体验。经过近30年的稳步发展&#xff0c;目前已在河南省内的许昌、新乡等地共开设13家门店&#xff0c;涵盖大型综合百货商场、中型社区超市及服…

8.服务通信:Feign深度优化 - 解密声明式调用与现代负载均衡内核

让服务调用更优雅 在微服务架构中,服务间通信如同血液流动般重要。传统方式中,开发者需要手动拼接URL、处理负载均衡、管理连接池——这些重复性工作不仅效率低下,还容易出错。Spring Cloud OpenFeign 的诞生,正是为了解决这一核心痛点。它通过声明式接口将HTTP请求模板化…

Docker入门指南(超详细)

一、什么是docker 在云计算和微服务架构盛行的今天&#xff0c;Docker 作为容器技术的标杆&#xff0c;彻底改变了应用部署和运行的方式。简单来说&#xff0c;Docker 是一个开源的容器化平台&#xff0c;它通过将应用程序及其依赖环境打包成一个轻量级、可移植的容器&#xff…

学习秒杀系统-实现秒杀功能(商品列表,商品详情,基本秒杀功能实现,订单详情)

文章目录前言数据库设计秒杀商品列表页秒杀商品详情实现简单秒杀订单详情前言 由于慕课课程中是先实现最基本的功能然后对其压测&#xff0c;压测那个地方出问题&#xff0c;然后在对其优化。所以本文记录的也是实现的是简单的秒杀功能没有涉及到高并发的优化。 数据库设计 …

React 的常用钩子函数在Vue中是如何设计体现出来的。

1、定义响应式数据&#xff1a; React 通过 useState 和 useReducer Vue 通过 ref 和 reactiveconst [state, setState] useState(initialState)const [state, dispatch] useReducer(reducer, initialState)2、定义缓存数据&#xff1a; React 通过 memo 和 useMemo useCal…

开源的 H.264/AVC 视频编码器库-x264 的交叉编译 和 程序测试

一、环境准备 安装交叉编译工具链 根据目标ARM架构选择对应工具链&#xff08;如arm-linux-gnueabihf-&#xff09;&#xff1a;# Ubuntu/Debian系统 sudo apt-get install gcc-arm-linux-gnueabihf g-arm-linux-gnueabihf# 验证安装 arm-linux-gnueabihf-gcc --version或者手动…

自由学习记录(69)

RectToPolar() 是 将直角坐标系 (笛卡尔坐标系) 的 uv 坐标&#xff0c;转化为极坐标系&#xff08;θ&#xff0c;r&#xff09; uv - centerUV&#xff1a;将坐标原点平移&#xff0c;使 (0.5, 0.5) 变成原点。 r length(uv)&#xff1a;距离中心点的半径&#xff08;从中…

Spring Boot 敏感信息入库加密全面解决方案

Spring Boot 敏感信息入库加密全面解决方案 在当今数据驱动的时代,保护用户隐私数据已成为系统设计的必备要求。本文将详细介绍 Spring Boot 应用中敏感数据加密存储的完整方案,涵盖从基础实现到生产级落地的全流程。 一、加密方案选型 1.1 常见加密类型对比 加密类型特点…

docker0网卡没有ip一步解决

正常查看ip的时候一直显示没有ip这里先删除docker0网卡ip link delete docker0然后重启服务systemctl restart docker再次查看显示有ip了并且查看配置文件也是正常的cat /etc/docker/daemon.json {"registry-mirrors": ["https://docker.m.daocloud.io",&q…

MYSQL-索引篇

索引结构概述MySQL 的索引是在存储引擎层实现的&#xff0c;不同的存储引擎有不同的索引结构&#xff0c;主要包含以下几种&#xff1a;索引结构描述BTree索引最常见的索引类型&#xff0c;大部分引擎都支持 B 树索引Hash索引底层数据结构是用哈希表实现的&#xff0c;只有精确…

(纯新手教程)HTML零基础教学

&#xff08;下一章&#xff1a;python网络爬虫&#xff09;HTML 简介HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是用于创建网页的标准标记语言。什么是 HTML&#xff1f;HTML 不是编程语言&#xff0c;而是一种标记语言使用标签来描述…

前端面试宝典---项目难点2-智能问答对话框采用虚拟列表动态渲染可视区域元素(10万+条数据)

引言 在我参与智能问答项目中一个智能体回话并不会像豆包一样&#xff0c;每次新建会话都是是从头开始&#xff0c;而项目中你想创建新会话就像chatbox一样&#xff0c;是点击橡皮擦开启新的聊天上下文&#xff0c;但是直接的聊天记录依然存在&#xff0c;针对超过十万&#xf…

Python元组:不可变数据的强大用法

文章目录元组概念1.基本特性2.创建元组3.访问元素4.元组的不可变性5.元组操作6.元组解包7.命名元组8.元组与列表的比较9.元组的优势10.适用场景11.常用方法小结元组 概念 元组是 Python 中一个非常重要的内置数据结构&#xff0c;它与列表(list)相似但具有关键差异。下面我将…