译:2025 年回顾(TkDodo)
原文:https://tkdodo.eu/blog/2025-in-review
作者:TkDodo
译者:Gemini 3 Pro High

Photo by Kelly Sikkema
又到了一年中的这个时候——回顾过去 12 个月所做之事的时刻。那些好的、很好的和完美的事情。因为,说实话,2025 年对我来说是非凡的一年。让我们从我的新工作开始:
Sentry 👨💻
1 月 7 日,在维也纳一家初创公司工作了十年之后,我以兼职承包商的身份加入了 Sentry 的设计工程团队。这无疑是我职业生涯中迄今为止最大的变化,既令人兴奋又令人恐惧。但是,我能说什么呢:我真的很喜欢在 Sentry 工作。维也纳办公室的每个人都非常友好和热情,工作既有挑战性又有回报,我甚至有机会去旧金山出差一周,这是我有了孩子以来第一次离开欧洲。
我在今年早些时候的博客文章《设计设计系统》中已经写过我们设计工程团队的工作,但如果这听起来有点抽象,以下是我今年帮助交付的一些具体但不完全的列表,我对此感到非常自豪:
Sentry 重新设计
如果你还没看到的话——Sentry 有了大胆的新外观,设计工程团队负责将其推广到整个平台。这与构建 S.C.R.A.P.S 同步进行——我们新的设计语言和设计系统(Sentry 可重用资产和模式的标准化集合)。
这个名字非常贴切,因为我们实际上是从代码库中到处找到的现有"共享组件"中拼凑出了第一个版本。这也意味着我们还有很多工作要做,包括改进 API 和文档,以及提供那些完全缺失的新模式。
改进 Sentry 代码库
我们付出了相当多的努力来为大家改进 Sentry 代码库,因为它在过去 10 年左右的时间里在几乎没有监督的情况下有机地增长。今年,我们启用了类型感知 lint,开启了 noImplicitAny,并引入了 knip 来删除大量未使用的代码。这个项目花了几个月的大量努力,也启发我写了《死代码不应存在》这个演讲,我将在明年的各种会议上发表。
改进 Sentry 产品
我们还做了一些工作来让 Sentry 对每个人都更快。⚡ 这包括路由意图预加载、Select 组件的自动虚拟化,以及使用共享布局来避免首次导航时闪烁的加载指示器。
我们正在用 nuqs 替换自制的 URL 状态解决方案,这是一个正在进行的迁移,由于其对浅层路由的支持,也将带来积极的性能影响。这使我成为了 nuqs 的活跃贡献者,因为我今年合并了一堆功能和修复。所以,为开源做贡献的最佳方式之一确实是帮助你喜爱和积极需要的工具。向 François Best 致敬,感谢他指导我了解 nuqs 代码库。他真的是最棒的(Best)。🙌
开源 🔓
一方面,感觉今年开源对我来说慢了下来。对于 TanStack Query,基本上什么都没发生。虽然,我们从 v5.62.11 开始这一年,现在已经是 v5.90.12,所以这意味着我们一定发布了一些功能,但我猜没有什么突破性的。staleTime:‘static’ 和 timeoutManager 浮现在脑海中,但它们都相当小众,所以如果你还没使用过它们,我不会感到惊讶。哦,还有 streamedQuery,这是一个不错的补充。我想有时候,我们只是忘记了一年真的有多长,像这样回顾,我们才意识到实际发生了多少事情。😅
另外,是的,我有一个未排序的列表,列出了某天可能成为 v6 的内容,但我并不着急。一旦我对需要做什么足够有信心,我会发布一个公开讨论。由于 AI,使用量激增,大多数人对这个库的现状非常满意。剩下要做的改进要么非常小,要么是针对不常出现的边缘情况。我不会说 Query 是"功能完整"的,但它很可能对用户目前尝试做的事情来说"足够好"了。
另一方面,有一件事悬在我心头,那当然是 Async React。
异步 React
React 最近发布了很多新功能:Suspense、useTransition 和 View Transitions、use、useOptimistic 和 Actions。如果你看过 Ricky 的演讲,你会发现这些功能真的很棒,如果使用得当会非常强大,但你可能也在演示中看到 API 有点底层,使用起来不像我们希望的那么简单。
在他演讲的第二部分中,他总结说我们需要三件事来改善这一点:默认情况下,我们的设计组件库、路由器和数据获取库都需要支持 Async React。基本上,一旦现有库提供了良好的抽象并与它们无缝集成,应用开发者就不需要担心那些底层 API 了。
作为同时在这三个领域工作的人——TanStack Router、TanStack Query 和 Sentry Scraps——这太可怕了。😂 这意味着我需要在未来弄清楚很多事情。至少目前,这似乎是"未来的我"的问题。随着 async react 工作组的启动,以及我们对这个话题有更好的集体理解,期待明年有更多关于这个主题的博客文章。
公开露面 🗣️
我在 React Paris 做了演讲 React Query API Design - Lessons Learned,并为 React Summit Amsterdam 和 React Advanced London 开设了名为 React Query - Beyond the Basics 的工作坊。这是我第一次做工作坊,我对这次经历感到惊喜。我喜欢教授 React Query 的模式,我认为鉴于我的经验,我特别有资格这样做。准备工作坊需要大量工作(比准备演讲还多),但看到每个人无论经验水平如何都能从那四个小时中学到东西,这完全值得。
所以如果你也想让我为你开设那个工作坊,无论是线下还是远程,请联系我。
写博客 📚
我尝试定期写博客,尽管工作很多,我还是成功写了十一篇博文——几乎每月一篇。我确实还有一篇关于 TanStack Router 的文章排队等着,但我还不能发布,因为它引用了还不存在且需要先实现的 API,所以我猜这算是第 12 篇。
我甚至上了 Hacker News 的头版,正如你在这个漂亮的统计数据中看到的:
这甚至让我再次上了 PodRocket 播客,谈论 Is React’s useCallback Hook Useless?。
尽管如此,我博客的流量同比开始下降了四分之一。我认为这主要是因为 AI 直接给你答案,这意味着很多人不需要再去读博客文章了。不过很高兴看到访问时长和每次访问的浏览量都在上升 📈,这表明决定访问我博客的人喜欢他们看到的内容。
跑步 🏃♂️
2025 年是我开始认真对待跑步的一年。我报名参加了 9 月的 Wachau 半程马拉松,并从 3 月开始为此训练。我从每周 2-3 次开始,夏天增加到每周 4 次。
我参加了几场 10 公里比赛,为更长的距离做准备,并感受一下真正参加比赛会有多大不同。我不想相信,但仅仅是他人的存在、为你加油的人们和"比赛心态"真的让你比训练时想象的要快。
例如,我最好的训练 10 公里成绩是 59:21,但我在比赛中跑出的个人最好成绩是 51:56。
7 月我还和朋友跑了一次 21.1 公里,以 2:07:04 完成。我比赛的目标是在 2 小时内完成,所以训练跑在那个范围意味着我在比赛中可能能达到目标。
遗憾的是,这从未实现。今年我唯一一次生病就是在比赛前一周。😭 三天后我感觉好多了,但还是决定听从身体的声音,放弃比赛。不值得拿健康冒险,而且我计划在那之后几天去 React Prague - The Spark,我不想错过那个活动。
回顾过去,统计数据告诉我,我的跑步也进步了很多。年初,我的基础跑通常是 5 公里,配速约 6:30。现在,我通常轻松以 5:40 的配速跑。也就是说——在相同的大约 150bpm 心率下。
这一年还没结束,但我的手表告诉我,到目前为止我在 142 次跑步活动中跑了刚刚超过 1000 公里(1007 公里)。明年,我确实想终于完成那场半程马拉松比赛,我想每月稳定跑 100 公里。
2026 展望 👀
有趣的是,我已经安排好了 2026 年的很多行程。我会比今年出行更多。如果你参加以下任何活动并想见面,请告诉我:
- 3 月 26 日和 27 日:React Paris
- 5 月 14 日和 15 日:JsHeroes
- 6 月 5 日:React Norway
- 6 月 11 日和 12 日:JsNation 和 React Summit
- 9 月 11 日:ZurichJs
我还有几个 CFP 尚未答复,所以也许我会参加一两个我还不知道的欧洲活动。
新年快乐 🎉
说到这里,我想祝大家新年快乐,是的,当然我将在 2026 年真正用 Astro 重写我的博客。就像过去四年一样。😉
今天就到这里。如果你有任何问题,欢迎在 bluesky 上联系我,或者在下面留言。⬇️
喜欢代码块中的等宽字体?看看 monolisa.dev
© 2025 by TkDodo’s blog. All rights reserved. Theme by LekoArts. This site is powered by Netlify.