自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(145)
  • 收藏
  • 关注

原创 GraphRAG 实战:用 Neo4j 知识图谱,让 RAG 从“找货“进化到“梳理关系“

说到知识图谱,绕不开 Neo4j —— 一款原生图数据库。它和 MySQL 的差别,不是“换个数据库”,而是换了一种世界观MySQLNeo4j存储核心:表、行、列存储核心:节点、关系查询语言:SQL查询语言:Cypher擅长的事:查记录擅长的事:查关系、多跳、因果链路用一句话区分它们的心态:MySQL 关注“这条数据是什么”,Neo4j 关注“这条数据和别的数据是什么关系”。把散落的文档、实体、关键词像知网那样串起来,就形成了一张清晰的知识图谱。

2026-11-08 21:19:01 322

原创 用 FastAPI + SQLAlchemy 从零手搓一个博客系统:一套能落地、能讲清楚的 RESTful 后端

database管连接,models管表,schemas管契约;crud管逻辑,routers管接口,main管组装。你要的“能跑、能扩、能讲明白”,就藏在这六个文件的边界里。框架负责规范和兜底,你负责把业务讲清楚。当你能把这套骨架完整复述给别人听,你就已经不只是“会用 FastAPI”,而是“懂后端”了。

2026-10-30 22:11:04 25

原创 别再 MySQL + Milvus 双写了:PostgreSQL + pgvector 一张表搞定 AI 长期记忆

聊天记录越来越不好存了。以前做业务系统,账号、订单、聊天记录,全塞 MySQL 就完事。但现在做 Agent,你得解决一个新问题 ——长时记忆。用户问"我们上次聊的那个方案是啥来着",你得靠语义检索把相关消息捞出来,而不是靠关键词 LIKE 瞎碰。MySQL 存业务数据 + Milvus/Pinecone 存向量。数据要双写:写 MySQL 成功后,还得同步一份到向量库要维护两套系统:一套连业务库,一套连向量库,连接池、监控、备份全翻倍要做数据一致性:一条消息写主库成功、写向量库失败,怎么办?

2026-10-28 17:02:55 135

原创 DeepAgent 实战:从零搭建一个会自己分工的深度调研助手

能力自己实现DeepAgent状态管理手写 State Graph内建子 Agent 调度手动 orchestratetask工具文件系统自己封装上下文压缩手动裁剪内建技能资产化没有skills目录沙箱计算自己搭quickjs中间件回到最初那句话:DeepAgent 不是替代 LangChain/LangGraph,而是让你跳过重复的底层基建,直接聚焦 Agent 的业务逻辑与能力迭代。

2026-10-26 20:37:28 143

原创 别再手写 Agent 基建了:用 deepagents 中间件,30 行代码搞定文件系统 / 记忆 / 上下文压缩

这篇文章不聊虚的,我们直接拿 demo 里的五个文件说事。看完你会拿到一套可以复制粘贴的心智模型:一、先搞清楚:createAgent 和 middleware 到底是什么关系很多人第一次看 会犯懵:它和 、和 LangGraph 到底啥区别?一句话讲清楚: 的入参就这么几个:中间件是什么? 说白了就是:。中间件函数被插入到每一次 Agent 运行的中间,提供额外功能,而不改变 Agent 本身的运行逻辑。这是它最美的地方——能力是"挂"上去的,不是"焊"死在主干里的。那"生命周期"具体

2026-10-24 11:08:45 204

原创 FastAPI + LangChain 实战:从 0 到 1 打造高性能 AI 后端服务

大模型应用火了一年多,很多人都在用 Python + LangChain 写脚本,但真要做成产品,就必须有后端 API。这个时候问题来了:用 Flask?太老了;用 Django?太重了;用 Node?还得再学一套。FastAPI 就是那个"刚刚好"的答案——性能比肩 Go/Node,类型提示自带文档,代码量少到离谱,而且跟 LangChain 家族天生一对。这篇文章,我会带你从零开始,把 FastAPI 的核心用法 + 与 LangChain 集成的实战经验,一次性讲透。架构清晰。

2026-10-23 21:53:05 158

原创 Harness Engineering 实战:从零手写一个支持 Sub-Agent 的 AI Agent 框架

维度Workflow路径预设写死自主拆解,按需调用应变无法应对不确定根据中间结果动态调整分支场景简单、固定任务需求模糊、有未知问题容错弱强(可换 Agent 重试)一句话:Workflow 是地铁线路图,Agent 是出租车司机。Harness Engineering = 用工程化手段,让 AI Agent 可靠、持续地完成任务。它不是 Prompt Engineering 的升级版,而是软件工程 + 系统设计 + LLM 能力的交叉地带。AI 应用开发工程师。

2026-10-19 17:39:32 104

原创 用 SQLite + 大模型做一个 Text2SQL 小助手:从建表到自然语言查询的完整实战

你有没有想过这样一个场景:老板突然发消息问“上个月销售部门平均工资是多少”,你不想打开数据库客户端,不想手写 SQL,只想一句话丢给 AI,它就能给你答案。这就是Text2SQL——把自然语言翻译成 SQL 语句。把数据库的 Schema 告诉大模型,让它根据自然语言生成对应 SQL。今天就带你用最简单的跑通一个完整 Demo,从零到一实现「自然语言查数据库」。看完你就能直接用到自己的小项目里。Text2SQL = Schema 描述 + 精准 Prompt + 结果执行Schema 是地基。

2026-10-09 20:31:51 275 9

原创 从 MySQL 的 LIKE 到 ES 倒排索引:一次把全文检索和混合检索讲透

做后端的朋友大概率都遇到过这个场景:产品经理跑过来跟你说,“能不能给文章加个搜索功能?就按内容搜,跟百度那样。SELECT * FROM article WHERE content LIKE '%关键词%';跑一下,几条数据的时候挺快,等到表里躺了几十万条、content 字段动辄几百字的时候,你会发现——查询直接奔着秒级去了,稍微并发一下数据库 CPU 拉满。于是你就被逼着去了解 ElasticSearch。

2026-09-27 15:48:42 347

原创 从 LangChain 到 LangGraph:用「网状工作流」解锁多 Agent 协作的正确姿势

从 LangChain 到 LangGraph,本质是从"线性编排"到"网状编排"的一次升级。多 Agent 不是为了炫技,而是为了在 Prompt 越来越长、任务越来越复杂的今天,让每一个"大脑"都能专注于自己那点事。好的架构不是把所有能力塞给一个 Agent,而是让每个 Agent 只做它最擅长的事。

2026-09-21 21:51:39 270

原创 跨域、SSE 与 WebSocket:从一次「请求被拦截」说起

这篇文章不打算把《HTTP 权威指南》抄一遍,而是把跨域这件事从「怎么绕过去」讲到「协议层到底发生了什么」。读完你能拿走三样东西:先明确一个概念:跨域是浏览器的行为,不是服务器的行为。浏览器出于安全考虑,实施「同源策略」(Same-Origin Policy)。所谓同源,必须同时满足三个条件:只要有一个不同,就是跨域。注意关键词:浏览器拦截的是「响应结果的读取」,而不是「请求的发送」。很多请求其实已经打到服务器了,只是浏览器不把结果交给你的 JS。CORS(Cross-Origin Resource Sha

2026-09-16 11:23:19 154

原创 别再用正则抠 JSON 了:LangChain 结构化输出的三种正确姿势

让大模型返回 JSON。不管是提取实体、解析表单、还是做下一步的业务分支判断,我们都希望 LLM 的输出是"机器可读"的,而不是一段自然语言。但现实往往很骨感。请介绍一下爱因斯坦的信息。请以 JSON 格式返回,包含以下字段:name、birth_year...```json"name": "阿尔伯特·爱因斯坦",...```然后你就直接原地爆炸——因为返回的字符串被 markdown 代码块包裹了。说白了,大模型是"展示型选手",它天然倾向于把结构化数据渲染成 markdown 方便人看。

2026-09-16 11:23:09 233

原创 别再傻傻等大模型吐完整段话了!一文吃透流式输出与 SSE

响应头作用常见坑让浏览器启用 SSE 解析器写错就完全不触发onmessage让中间层不缓存、不攒数据只加头不改 Nginx = 无效保持 TCP 长连接HTTP/2 下失效,甚至被拒结论:三行头,是 SSE 能不能"流"起来的命根子。写对是及格,理解才叫合格。流式输出不是性能优化,是体验优化——把等待变成过程。SSE = HTTP 长连接 +——三行响应头,每一行都有它的使命。EventSource 是浏览器最省心的 SSE 客户端,但只支持 GET、只支持单向推送。

2026-09-15 09:40:15 196

原创 别让你的 Agent 失忆:从截断到 Milvus,手撸一套生产级 Memory 模块

截断的痛点很明确:丢信息。那能不能让 AI 把旧消息"压一压"再留着?能。这就是 Summarization Memory。检查消息条数超过阈值 → 把老消息交给 LLM 总结成一段话clear history,塞回"最近消息 + 摘要"});// 消息数组 -> 带角色前缀的字符串const conversationText = getBufferString(messages, '用户', '助手');

2026-09-14 14:04:24 148

原创 Agent Memory 管理:从“金鱼记忆“到“过目不忘“

存储解决了"记在哪",但"怎么记"才是 Memory 管理的灵魂。当对话变长,截断会丢失重要早期信息。这时候可以用 LLM 自己来做摘要// 伪代码:定期触发总结new SystemMessage("请总结以下对话的要点,保留关键事实和用户偏好"),...history]);// 用 summary 替换旧的历史这就像你开会做笔记,不需要记住每一句话,但要点必须留下。总结的粒度可以按需调整,可以每 N 轮总结一次,也可以按 Token 阈值触发。

2026-09-14 14:04:18 151

原创 全栈部署实战:用宝塔 + Nginx + Node 搞定前后端分离项目,告别跨域烦恼

让用户找到你的服务器—— DNS + 安全组/防火墙。让 Nginx 统一接客—— 静态资源直接返回,动态请求反向代理到后端。让后端稳定运行—— 编译 TS、启动 Node 服务、连接数据库。掌握了这套流程,再用宝塔面板可视化操作,你会发现部署其实是一件挺有成就感的事。下次产品经理再问你“什么时候能上线”,你可以自信地说:“给我半小时”。当然,真正的生产环境还需要考虑日志、监控、自动部署(CI/CD)、负载均衡等,但那是另一个故事了。先把今天的流程跑通,你的全栈技能树就又点亮了一个重要的分支。

2026-09-01 13:11:32 221

原创 从零设计一个博客系统的数据库:表结构、索引与约束的实战思考

数据库设计是后端开发的基石,一个合理的表结构能让你的应用性能更好、扩展更容易、代码更清晰。本文通过一个博客系统的核心表设计,展示了如何从业务需求出发,设计表、索引和约束。同时,我们也深入理解了静态资源从上传到访问的整个链路,明白了为什么头像 URL 长那样,以及 DNS、Nginx、CDN 在其中的作用。表结构反映业务模型,索引服务查询性能,约束保障数据完整性;而网络架构决定了数据的流向和访问速度。这张表会被怎么查询?哪些字段需要唯一?数据之间是什么关系?

2026-08-26 11:02:59 356

原创 Next.js + AI:全栈开发的“上下文 Buff”从何而来?

传统前后端开发,最常见的是 React + Java/Python。这种架构下,你需要在两种语言、两套生态之间来回切换。前端一个上下文,后端一个上下文,AI 处理起来也费劲——它得同时理解两套规范,还容易在边界处产生幻觉。Next.js 则把前后端统一在 JavaScript/TypeScript 一个语言栈里。Claude Code / Codex 支持最好Next.js 的约束和简化(CSR、SSR、SSG、ISR)开箱即用。

2026-08-25 21:46:43 238

原创 SDD 规范驱动实战:我用 Vibe Coding 开发了一个 AI 网页翻译 Chrome 插件

第四个文档是 layout.md,专门描述界面长什么样、交互怎么走。很多人忽视这一步,结果 AI 生成的界面要么丑得没法用,要么交互逻辑混乱。整体布局:插件是弹窗还是侧边栏?宽度多少?有哪些区域?组件描述:按钮放哪里?输入框在哪儿?结果展示区怎么滚动?交互流程:用户点击“翻译”后发生什么?加载状态怎么显示?复制按钮的反馈是什么?流式渲染:翻译结果是一段一段出现的,界面如何平滑展示?这些描述不需要画图,用文字说清楚就行。AI 理解能力很强,只要你描述得足够具体,它就能生成符合预期的界面。

2026-08-24 10:20:05 146

原创 Vibe Coding 爽完就返工?试试 Spec-Driven Development:AI 时代真正的工作流

Vibe Coding 不是一无是处,它适合快速探索原型、验证想法。但一旦进入持续交付阶段,纯靠“氛围”驱动,返工几乎是必然。SDD 的核心不是写文档,而是完成第一次创造。把做什么、为什么做、怎么做、如何一步步做,用文档固定下来。然后让 AI 在规范的约束下,高效完成第二次创造。我现在是准备画蓝图,还是准备直接盖房?代码生成成本越来越低,真正稀缺的是清晰、可执行、可验证的意图。SDD 不是让你少写代码,而是让你写对代码。

2026-08-24 10:19:59 178

原创 三列布局?Flex 一把梭,但别再把 FFC 叫成 BFC 了

基本结构左右固定中间自适应flex: 1;main 优先渲染:把 main 写在 DOM 最前面,用order调整视觉顺序概念辨析开启的是 FFC,不是 BFC;两者都是独立的格式化上下文写到这里,你会发现三列布局真的没什么神秘的。Flex 帮我们做的是把“自适应”这件事标准化了,而我们要做的,就是理解它背后的上下文规则,别让固定列缩水、别让内容溢出。

2026-08-23 09:07:53 234

原创 React + Zustand + JWT:从零实现登录鉴权与请求拦截

localStorage 的 XSS 风险:token 存在 localStorage 中,如果网站存在 XSS 漏洞,攻击者可以窃取 token。更安全的做法是使用 httpOnly cookie,但那需要后端配合设置。对于多数内部系统或学习项目,localStorage 足够方便。token 过期处理:JWT 有过期时间(expiresIn),过期后后端会返回 401。前端可以在响应拦截器中统一处理 401,比如清除状态并跳转登录页。本文示例没有处理,实际项目中应该加上。刷新页面状态初始化。

2026-08-23 09:07:47 204

原创 TS 工具类型实战:Pick/Omit/Partial/Record 一次讲透,别再 Omit 反了

工具类型作用典型场景keyof T取所有键联合动态属性、遍历Pick<T, K>挑选字段列表项、DTOOmit<T, K>剔除字段脱敏、排除 id从联合类型中删除联合类型过滤Partial<T>所有字段可选更新、表单草稿构造键值对状态码、字典获取函数返回类型第三方库、封装工具类型不是炫技,而是让类型像积木一样复用。类型定义的成本不在“写”,而在“改”;工具类型能帮你把改动收敛到一处。下次在项目里遇到“这个类型跟那个类型就差几个字段”的时候,先别急着新建interface。

2026-08-20 14:19:19 233

原创 Docker + Nginx 反向代理:从“我电脑能跑”到“哪里都能跑”

打包:把应用和运行环境打包成镜像。分发:镜像可以轻松 pull/push,任何设备都能拿到同一份环境。隔离:容器之间互不影响,不会因为版本冲突而崩溃。而 Nginx 反向代理,则是把“用户入口”和“服务端口”解耦,让你可以灵活地在后面挂任何服务。环境问题不再是玄学,容器化让你把“能跑”这件事固化下来,变成一份可移植的配置。这件事,是不是该交给 Docker 了?

2026-08-20 14:19:11 713

原创 NestJS 入门实战:从 0 到 1 撸一个 Todo CRUD,感受装饰器与模块化的优雅

id: number;{ id: 1, title: '学习Nestjs', completed: false },{ id: 2, title: '学习CRUD', completed: true },if (!todo) {throw new NotFoundException(`Todo ${id} 不存在`);throw new NotFoundException(`Todo ${id} 不存在`);

2026-08-19 15:01:43 479

原创 工厂模式:像点奶茶一样创建对象,蜜雪冰城教你解耦

工厂模式就像点奶茶:你只需要告诉蜜雪冰城“我要柠檬水”,不用关心柠檬怎么切、茶怎么泡、杯子怎么封口。记住这一行就够了。下次再遇到满屏的new和switch“这里是不是该开一家工厂了?

2026-08-19 15:01:37 195

原创 单例模式:从弹窗管理到全局状态,一个模式搞定

这篇文章从一个弹窗管理的例子出发,聊了单例模式的核心思想、多种实现方式,以及在前端工程中的真实应用场景。实现方式适用场景私有性Class 静态方法简单场景、教学演示❌ 属性公开闭包 + IIFE需要保护实例引用✅ 私有变量ES6 模块导出实例工程实践首选✅ 天然单例Symbol 属性需要 Class 写法 + 一定保护⚠️ 半私有核心就一句话:确保一个类只有一个实例,并提供一个全局访问点。下次当你发现某个对象"整个项目只需要一个"的时候,别犹豫,单例模式安排上。但也要记得,

2026-08-18 20:53:38 218

原创 在浏览器里跑 DeepSeek-R1:WebGPU + Transformers.js 实战

这个项目展示了浏览器端运行大模型的巨大潜力。通过 WebGPU + Transformers.js,我们可以在完全离线的环境下运行一个 1.5B 参数的推理模型,而且用户体验相当流畅(在中高端设备上 tps 可达 20+)。技术栈的核心思想WebGPU 让浏览器拥有了接近原生的 GPU 计算能力Transformers.js 将 HuggingFace 生态带到了前端Web Worker 保证了 UI 的流畅性TypeScript 类型声明让实验性 API 可用且安全。

2026-08-18 20:53:33 386

原创 用 Next.js 和 Redis 撸一个 Markdown 笔记系统:RSC 实战与组件化拆解

return (</p></header>这里我们用dayjs格式化时间,并截取内容前 20 个字符作为摘要。:服务端组件拿数据,客户端组件做交互。Redis 哈希存储:轻量、快速、零配置。BEM 命名 + 组件拆分:代码可维护性拉满。别名配置:告别相对路径地狱。搜索功能:目前是预留,可以在里做客户端过滤,或服务端搜索接口。持久化:Redis 数据在内存里,重启会丢,可以配合 MySQL 做持久化。

2026-08-17 13:52:08 510

原创 用 ESLint 9 的 Flat Config,把团队代码规范“焊死”在 CI 里

ESLint 不是用来限制你的工具,而是帮你把团队的编码共识变成一条条明确的红线。它让你不必在 Code Review 时为了一个分号浪费口舌,也让新同学能快速对齐项目的代码风格。规范不是束缚,而是让团队新人少踩坑的护栏。

2026-08-16 09:05:51 357

原创 深入理解 React 水合(Hydration):从静态 HTML 到可交互页面

水合是 SSR 和 CSR 之间的桥梁,它让服务端渲染的静态页面具备了客户端交互能力。概念:水合是 React 将事件监听器和状态附加到服务端 HTML 的过程。流程:SSR 生成 HTML → 浏览器加载 JS → React 对比虚拟 DOM → 绑定事件 → 页面可交互。与 CSR 区别:水合是“复用已有 DOM”,CSR 是“从零创建 DOM”。最大坑:服务器和客户端渲染结果必须一致,否则水合失败。Next.js 优化:选择性水合、流式 SSR,让交互更快。

2026-08-15 15:19:43 295

原创 Next.js 全栈实战:从 SPA 到 SSR,SEO 友好到底怎么落地?

文件即路由:约定大于配置,page.tsx就是页面,layout.tsx就是布局。服务端组件:默认 SSR,组件在 Node 里渲染成 HTML,爬虫可读。客户端组件声明交互组件,服务端预渲染 + 客户端水合。API 路由route.ts返回 JSON,一个项目搞定前后端。#root (SPA) → 爬虫看到空壳JSX + 数据 → HTML (SSR) → 爬虫看到内容下次再有人问你“Next.js 和 React 有什么区别?

2026-08-15 15:19:38 365

原创 全栈项目实战:前端独立开发,不再傻等后端接口

通过这次 Todo 全栈实践,我们完成了前端工程化的一个重要拼图——前端接口层。✅ 前后端开发完全并行,不再互相等待。✅ 前端自闭环,任意页面和交互都可提前验收。✅ 联调时的切换成本几乎为零,减少扯皮。✅ 统一的 axios 实例,方便后期加拦截器、错误处理等。这套模式不仅适用于小型 Todo 项目,在复杂的企业级中台、BFF 层也同样有效。很多大厂的前端团队甚至会在本地 Mock 的基础上加入接口文档自动生成 Mock 数据的能力(如 Apifox、YApi),进一步提高效率。

2026-08-14 14:39:59 371

原创 React 性能优化三剑客:memo、useCallback 和 useMemo 的配合艺术

很多教程会说和useMemo是用来“缓存函数”和“缓存计算结果”的,但它们真正的定位是引用稳定性。你的目标是让那些被memo保护的子组件收到的 props 引用不要无意义地变化,从而避免重渲染。写性能优化的代码,本质上是在管理“变化” —— 你告诉 React 什么真正变化了,什么只是看起来变化了。memo 是盾,useCallback/useMemo 是矛,你要把矛头准确扎向“假变化”。

2026-08-14 14:39:50 358

原创 深入骨髓!50行代码拆解LLM Harness工程:如何用“赛马机制”根治幻觉

如果你只学会了“调三次接口取最大”,那这篇文章你白看了。这段50行的Harness,本质上是经典控制论(生成 -> 感知 -> 决策)在AI工程中的最小闭环生成(Act):利用随机性探索多种可能(赛马)。感知(Evaluate):引入独立裁判视角,建立反馈机制(打分)。决策(Pick):基于反馈做归约收敛(选最优)。工程化的终极奥义不是消灭LLM的幻觉,而是用确定性的流程去管理不确定性。

2026-08-14 14:39:43 345

原创 TypeScript 灵魂拷问:type 和 interface 到底怎么选?

name: '张三',age: 18,name: '李四',age: 20,你会发现,在这个层面interface和type几乎可以无缝互换。约束对象、变量用于函数参数和返回值这才是最迷惑人的地方——如果只是定义个简单的对象,用谁都行。真正的区别,藏在“变化”里。特性interfacetype描述对象结构✅✅声明合并(同名自动合并)✅❌(同名报错)继承方式extends交叉类型定义联合/元组等非对象类型❌✅函数类型定义调用签名箭头语法,更简洁。

2026-08-13 22:37:17 329

原创 WebGPU + Transformers.js:把 DeepSeek-R1 塞进浏览器,真香!

谁说前端只能写页面?当浏览器遇上 GPU 加速,1.5B 参数的大模型也能在你电脑上流畅推理,而且全程数据不出设备。这篇实战笔记带你从零搭建一个纯浏览器端的 DeepSeek-R1 对话应用。

2026-08-13 22:37:11 506

原创 从混乱到清晰:项目架构与自定义 Hook 的双重实践

在动手写逻辑之前,我们先要明确数据的形状。TypeScript 是我们坚实的后盾,它能帮我们在编译阶段就避免大量低级错误。在id: string;有了这份清晰的“数据蓝图”,我们的后续开发将更加稳健和高效。今天我们以一个标准的 React + TypeScript 项目结构为起点,完成了一次从架构设计到自定义 Hook 封装的完整实战演练。合理的项目架构apicomponentshookstypes)是团队协作和项目长期维护的基石。自定义 Hook则是我们实现逻辑复用和视图解耦的核心武器。

2026-08-12 21:47:23 239

原创 深聊 useRef:比你知道的再多一点

useRef是 React 设计中非常精妙的一环。它既是我们与命令式 DOM 操作之间的桥梁,也是我们绕过 React 响应式系统的一个“安全通道”。用ref替代,在useEffect中操作。用ref存储那些“变了也不需要重新渲染”的数据。useRef在整个生命周期中保持引用不变,这是其所有特性的基石。下次当你再次写下useRef时,别忘了你正在使用 React 赋予你的“超能力”,去窥探和影响那个响应式世界之外的物理空间。

2026-08-12 21:46:51 352

原创 React 表单处理:受控 vs 非受控,一个登录框教会你如何选型

受控组件赋予我们的是对表单数据的绝对控制权,非受控组件则是在简单场景下的轻量快捷方式。作为中级开发者,你需要的是在合适的时机做出合算的选择,而不是被某一种模式绑架。同时,别忽略项目中那些小而美的工程化技巧——比如用index.js统一导出组件,它能让你在代码量增长时依然保持从容。下次再写表单时,不妨先问自己一句:“这个输入值,我需要在它还没提交前就知道吗?” 如果答案是 yes,请毫无犹豫地用受控组件,并享受 React 单向数据流带来的确定性。

2026-08-11 08:15:31 383

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除