4.3k 4 分钟

# Axios 请求优化封装(去重与防抖) 核心目标是封装一个健壮的 request 函数,该函数在发起请求前能自动处理队列中的重复请求(去重),并能通过配置实现发送频率限制(防抖) 核心功能 请求去重:利用 Axios 拦截器,在发送请求前和响应接收后,通过 CancelToken 机制取消相同的待发请求 请求防抖:允许用户再请求配置中指定 debounce 延迟时间,从而限制请求的发送频率 # 请求去重机制 核心数据结构 使用一个 Map 结构来存储待取消的请求: const pendingRequests = new Map<string,...
4.8k 4 分钟

# 目标 实现一个搜索框,输入内容后,实时搜索并展示下拉框匹配的结果。 输入内容 根据内容请求接口,返回字符串数组 输入框做防抖 以队列形式请求 下拉框采用虚拟列表 # 输入内容 通过 input 组件并采用 onChange 事件来获取输入的内容 # 根据内容请求接口 把接口请求操作写到 useEffect 中 获取到结果后 setState 到全局 注意:每次请求完后,需要对整个列表的滚动条进行复原 # 输入框做防抖 防抖单独写一个 hook : useDebounce<T>(value: T, delay: number):...
2.6k 2 分钟

# 个性化快捷键绑定 在 React 应用中,我们可以使用 react-hotkeys-hook 库来实现快捷键绑定,但是在这里,我先暂时使用一下最原始的写法,哈哈。 # 思路 创建一个快捷键到事件的映射表 添加监听事件 获取当前按下的键 判断当前的阶段,如果是修改阶段,则修改对应事件的快捷键,如果是执行阶段,则执行对应事件 # 代码 import React, { useState, useEffect, useCallback } from 'react'; interface Shortcut { event:...
2.3k 2 分钟

# 使用 Konva.Tween 实现拖拽后的惯性动画 在现代 Web 应用中,为用户提供流畅自然的交互体验至关重要。通过为拖拽操作添加惯性效果,我们可以让应用感觉更加生动和自然。 # 准备工作 在开始之前,确保已安装 Konva.js 库。 npm install konva或者说直接在 HTML 中直接引用 <script src="https://unpkg.com/konva@8.3.10/konva.min.js"></script>#...
13k 12 分钟

# 手写 Promise # 构造函数 核心步骤: 定义类 => 添加构造函数 => 定义resolve/reject => 执行回调函数 class MyPromise { // state = PENDING; // result = undefined; constructor(executor) { const resolve = (value) => { } const reject = (reason) => { }...
17k 16 分钟

# 多种格式的导入导出 支持 JSON 格式的导入导出、专有文件 dmp 格式的导入导出、 xlsx 格式的导入导出、 md 格式的导入导出。 支持导出 png 、 jpg 、 svg 、 pdf 格式。 这里使用的数据结构是 export interface Node { id: string; text: string; position: [number, number]; children: string[]; size: [number, number]; // 新增尺寸字段 [width, height] collapsed: boolean; // 新增折叠状态...
7.2k 7 分钟

# 📝如何将思维导图导出导入为 XMind 文件 Xmind 文件本质上是一个 ZIP 压缩包。其中包含了多个 JSON 文件 (如 content.json , metadata.json 等),这些文件描述了思维导图的内容和结构 # 1. 🛠️ 准备工作 JSZip: 用于创建 ZIP 文件。允许我们轻松创建符合 XMind 规范的 ZIP 文件 file-saver: 用于保存生成的文件。这个库简化了浏览器环境下的文件下载过程。 # 2. 🔍 定义数据结构 # Node 接口 interface Node { id: string; // 节点 ID...
757 1 分钟

# 📐 构造二次贝塞尔曲线:轻松实现节点间的优雅连线 在开发思维导图或树状结构应用时,如何优雅地连接节点并绘制平滑的线条 # ✨ 贝塞尔曲线简介 贝塞尔曲线是一种用于生成平滑曲线的数学工具 。它广泛应用于图形设计、动画、UI 开发等领域。贝塞尔曲线的特点是可以通过控制点来调整曲线的形状,从而生成各种平滑的路径。 多个贝塞尔曲线的组合可以生成各种复杂的曲线,如圆弧、曲线、贝塞尔曲线等。 一次贝塞尔曲线的公式是: B(t) = (1 - t) * P₀ + t * P₁ # 二次贝塞尔曲线 二次贝塞尔曲线是最简单的贝塞尔曲线类型之一,它由以下三个点定义: 起点...
18k 17 分钟

# 🌳 带尺寸多叉树分层递归布局算法详解 这里主要应用与思维导图,树的方向是从左到右 让你的树形结构「严丝合缝」!✨ 本算法可实现: ✅ 父节点垂直居中于子节点区域 ✅ 子节点右侧竖直排列不重叠 ✅ 支持动态尺寸和折叠状态 ✅ O (n) 时间复杂度 # 🧩 核心思想 分为两阶段 📏 预计算阶段:自底向上统计子树尺寸 🎯 定位阶段:自顶向下递归布局 # 🛠️ 实现 # 1. 📦 数据结构定义 interface TreeNode { id: string; position: [number, number]; // 节点中心坐标 size:...
3.2k 3 分钟

# 🎨 当 Canvas 遇见 DOM:在 Konva 中实现丝滑文本编辑的技巧 # 💡 为什么需要 DOM + Canvas 的混合方案? konva 的 Text 组件虽然强大,但在处理复杂文本编辑时存在局限: ⌨️ 缺少自动换行、光标控制等原生能力 🖥️ 复杂样式支持有限 解决方案:通过 DOM 元素模拟 Canvas 的文本编辑! # 📌 目标 让 Konva 画布中的节点文本 双击可编辑,效果像直接在 Canvas 上输入文字一样丝滑!(无需 Konva 的复杂组件,直接用原生 <textarea> 实现!) # 🔧...