React
6篇文章
状态管理
2026/5/18 · 29 min read
这篇文章想聊一聊状态管理(State Management)。它不是一篇库的横向对比。相比判断哪个工具更好,本文更想梳理一种感觉:应该如何看待状态,又该在哪里划定边界。 如今,AI 工具(Claude、ChatGPT、Cursor、Gemini、Copilot)已经深度融入我们的工作。开发速度呈指数级提升,但坦率地说,我感觉服务的完成度并没有同步跟上。功能越多,随之增加的 bug 也越多,我们也越...
Toss Frontend Fundamentals 模拟考试第 2 期重构复盘
2026/3/28 · 20 min read
这篇文章想聊聊我参加 Toss Frontend Fundamentals 模拟考试第 2 期时所经历的重构过程。 我平时就对代码审查和重构很感兴趣,因此参与了 Toss 发布的一项形式颇为有趣的 Frontend Fundamentals 模拟考试。题目提供了一个会议室预订应用,要求对它进行重构。项目还附带了测试代码,为验证重构过程中功能是否遭到破坏提供了安全网。 最终,我用了两天时间完成重构,...
queryKey
2026/1/4 · 34 min read
这篇文章想聊一聊 TanStack Query 的 queryKey。 我在实际项目中使用 TanStack Query 时,曾多次彻底重构 queryKey 的管理方式。最初,我只是在组件里内联写上 ['user', userId] 这样的数组;后来每次做缓存失效都要在不同地方重复写相同的键,开始频繁出现拼写错误,于是又把它们迁移到 QUERYKEYS 这样的常量对象中。再后来读了 TkDodo...
错误处理
2025/11/17 · 36 min read
这篇文章想谈一谈:在前端,我们该如何捕获错误。 笔者在实际工作中编写错误处理代码时,经常会有一种说不清的不踏实感。有些错误用 try/catch 捕获,有些由 ErrorBoundary 捕获,还有些则交给 TanStack Query 的 onError。它们的职责范围既有细微重叠,又存在错位。结果就是,有时错误悄悄漏了出去,有时又传播到了本不希望它抵达的地方。 问题在于,我们很少把这些工具的运...
彻底掌握 React Fiber
2025/5/20 · 40 min read
这篇文章想聊聊堪称 React 心脏的 Fiber 架构。 笔者刚接触 React 时,只把 “Fiber” 当作面试中的高频问题。背下“把 React 的渲染工作拆分成工作单元来处理”这一句话,就以为那是全部。但真正开始阅读 React 源码后,我才意识到 Fiber 并非一个简单概念,而是一套掌管 React 渲染一切环节的运行时架构。 至今仍忘不了第一次打开 React 源码时受到的冲击。当...
Zustand,你到底为什么是 ProviderLess?
2024/8/18 · 28 min read
这篇文章想聊一聊 Zustand 是如何在没有 Provider 的情况下完成状态管理的。 使用 Zustand 时,我一直把无需 Provider 就能管理状态这件事视为理所当然。直到某天,我突然想到一个问题。在 React 生态中,大多数库都已把用 Provider 包裹应用变成了一种近乎仪式化的做法。TanStack React Query 必须由 QueryClientProvider 包...
状态管理
2026/5/18 · 29 min read
这篇文章想聊一聊状态管理(State Management)。它不是一篇库的横向对比。相比判断哪个工具更好,本文更想梳理一种感觉:应该如何看待状态,又该在哪里划定边界。 如今,AI 工具(Claude、ChatGPT、Cursor、Gemini、Copilot)已经深度融入我们的工作。开发速度呈指数级提升,但坦率地说,我感觉服务的完成度并没有同步跟上。功能越多,随之增加的 bug 也越多,我们也越...
Toss Frontend Fundamentals 模拟考试第 2 期重构复盘
2026/3/28 · 20 min read
这篇文章想聊聊我参加 Toss Frontend Fundamentals 模拟考试第 2 期时所经历的重构过程。 我平时就对代码审查和重构很感兴趣,因此参与了 Toss 发布的一项形式颇为有趣的 Frontend Fundamentals 模拟考试。题目提供了一个会议室预订应用,要求对它进行重构。项目还附带了测试代码,为验证重构过程中功能是否遭到破坏提供了安全网。 最终,我用了两天时间完成重构,...
queryKey
2026/1/4 · 34 min read
这篇文章想聊一聊 TanStack Query 的 queryKey。 我在实际项目中使用 TanStack Query 时,曾多次彻底重构 queryKey 的管理方式。最初,我只是在组件里内联写上 ['user', userId] 这样的数组;后来每次做缓存失效都要在不同地方重复写相同的键,开始频繁出现拼写错误,于是又把它们迁移到 QUERYKEYS 这样的常量对象中。再后来读了 TkDodo...
错误处理
2025/11/17 · 36 min read
这篇文章想谈一谈:在前端,我们该如何捕获错误。 笔者在实际工作中编写错误处理代码时,经常会有一种说不清的不踏实感。有些错误用 try/catch 捕获,有些由 ErrorBoundary 捕获,还有些则交给 TanStack Query 的 onError。它们的职责范围既有细微重叠,又存在错位。结果就是,有时错误悄悄漏了出去,有时又传播到了本不希望它抵达的地方。 问题在于,我们很少把这些工具的运...
彻底掌握 React Fiber
2025/5/20 · 40 min read
这篇文章想聊聊堪称 React 心脏的 Fiber 架构。 笔者刚接触 React 时,只把 “Fiber” 当作面试中的高频问题。背下“把 React 的渲染工作拆分成工作单元来处理”这一句话,就以为那是全部。但真正开始阅读 React 源码后,我才意识到 Fiber 并非一个简单概念,而是一套掌管 React 渲染一切环节的运行时架构。 至今仍忘不了第一次打开 React 源码时受到的冲击。当...
Zustand,你到底为什么是 ProviderLess?
2024/8/18 · 28 min read
这篇文章想聊一聊 Zustand 是如何在没有 Provider 的情况下完成状态管理的。 使用 Zustand 时,我一直把无需 Provider 就能管理状态这件事视为理所当然。直到某天,我突然想到一个问题。在 React 生态中,大多数库都已把用 Provider 包裹应用变成了一种近乎仪式化的做法。TanStack React Query 必须由 QueryClientProvider 包...