『译』资深前端开发者如何看待React架构

原文:How Senior Frontend Developers think about React Architecture

作者:Scripting Soul

小声 BB

本文在翻译过程中确保意思传达准确的前提下,会加入很多本人的个人解释和一些知识补充(使用引用块&&括号标注) ,像这样

(我是一个平平无奇的知识补充块)

🎊如果觉得文章内容有用,交个朋友,点个赞再走~ 🎊

一些比较清晰的视角,可以学习到如何高屋建瓴地去构造 React 组件。和读者分享什么才是一个资深开发者应该关注和做到的事情。

正文

好久没写了。

当我们谈论 React 时,我们通常会想到组件。无论是一个简单的按钮、一整个表格,还是一个带图表的完整仪表盘页面。这是我们大多数人开始时的方式。我们打开设计稿,看看屏幕上有什么,然后尝试用代码去还原。

但是,当我们已经开发 React 应用多年,做过数十个功能、上千个组件、几百个边界情况后,我们会意识到,React 其实不只是关于组件,而是关于架构。

而高级前端开发者看待架构的方式,和初级开发者完全不同。我在许多文章中都强调过这一点。这并不是因为他们知道某本书里隐藏的某个神秘设计模式,而是因为......他们看待系统的方式不一样。

架构在第一个组件之前就开始了

初级开发者从 UI 开始:

"这是一个界面,我先来为它构建组件。"

资深开发者不会从这里开始。他们从边界开始。

  • 这个功能属于哪里?
  • 它依赖什么?
  • 谁拥有数据,这些数据应该传播到什么程度?

他们认为组件不是第一步,而是最后一步。组件只是更深层次内容的表层。其下隐藏着一个流程:数据、状态、业务规则、副作用,最后才是 UI。

这种思维转变改变了一切。它能防止在功能增长时架构的崩塌。在我看来,这是最重要的事情之一。

他们保持关注点分离

资深开发者通过艰难的经验学到一件事:当关注点混在一起时,项目就会(某种程度上)腐烂(变成屎山代码)。

初级开发者会很开心地在组件里放一个 API 调用,把表单验证和 UI 渲染混在一起,然后到处加 useEffect 来修修补补。它确实能工作......(能撑住一段时间)。

资深开发者会保持分离:

  • UI 层:纯粹的展示型组件。没有逻辑,没有副作用。
  • 状态层:数据存储、更新和同步的地方。
  • 领域逻辑层:业务规则所在,独立于 UI。

为什么要这么严格?因为分离带来的是自由。如果 API 变了,只需要改领域逻辑层。如果 UI 重新设计了,只需要改组件。每一层都能独立呼吸,而不会扼住其他层的喉咙。

这就是为什么大型应用能存活多年,而不是被自己的重量压垮。

他们不追求完美,而是让改变变得便宜

初级开发者想要"完美"的架构,想预测未来。

资深开发者知道未来总会出乎意料。API 会崩,设计会转向,产品经理会提出全新的需求。再多的远见也无法预测一切。

所以,他们不追求完美,而是为变化而设计:

  • 清晰的边界,方便替换。
  • 层与层之间的松耦合,方便重构。
  • 不做过度设计,只有在真正值得时才做抽象。

所以,我会说,真正的技能不在于今天做出最完美的架构,而在于让明天的改动毫无痛苦。

数据流如河流

React 的核心是数据向下流动、动作向上流动。但在真实的应用中,这些流会成倍增加。数据来自 API、缓存、Redux、context、socket 等等。

初级开发者会把 state 放在感觉方便的任何地方。

资深开发者会问:这个 state 真正属于哪里?

  • 只属于一个组件?保持本地化。
  • 跨越整个功能?放在 context 或某个状态切片中。
  • 属于整个应用?用 Redux、Zustand 或其他 store 集中管理。

一个很好的比喻是:他们把数据流当作河流。水流清晰地向下流动,系统就是健康的;如果它泄漏、积水或泛滥,系统就会崩溃。

他们按"意义"组织代码,而不是按"外观"

这是最隐形但也最深刻的区别之一。

初级开发者按组件组织代码:按钮、卡片、表单。

资深开发者按领域组织代码:用户、支付、设置。

为什么?因为 UI 是临时的。同一个"卡片"可能在十个地方出现,每个地方的含义都不一样。但领域,比如"用户"、"交易"、"通知",这些东西是长期存在的。

所以,资深开发者不会有一个叫 components/ 的文件夹,而是有 features/ 或 domains/。每个领域都管理自己的 UI、状态和逻辑。代码库开始像是产品的地图,而不是一堆小部件的集合。

这就是为什么新工程师走进资深开发者的项目,能立刻知道东西应该放在哪。

他们拥抱"约束",而不是"可选项"

初级开发者常犯的一个错误是过度灵活。

"让我们把这个组件做得超级可复用。让它接受 10 个 props,这样什么场景都能用。"

资深开发者走向了相反的方向:我们能限制什么?

  • 按钮组件只接受它真正需要的 props......别的不要。
  • API 层应该返回有类型、可预测的数据......没有猜测。
  • 团队的模式应该是严格的------没有无尽的变体。

约束减少了心理负担。它让系统以一种最好的方式变得无聊。每个人都以同样的节奏编码。架构变得可预测,而可预测性就是力量。

他们知道架构是为人服务的,而不是为机器

这是最后也是最重要的一个教训。我在其他文章里也强调过这一点。

架构根本不是关于代码的。它是关于人的。

  • 新开发者能不能不问别人就知道该把文件放哪?
  • 两个工程师能不能并行工作而不互相干扰?
  • 未来的维护者能不能在没有上下文的情况下读懂这段代码的意义?

这才是架构的真正考验。它并不总是关乎性能、优雅或巧妙的抽象,而是它能否帮助人们无痛地协作。

简而言之......

React 给了我们组件。组件是砖头。但架构才是建筑。

资深开发者不会纠结该用 Redux 还是 Zustand,也不会纠结文件应该放在 src/components 还是 src/ui。这些都是细节。他们思考的是更深层次的东西:边界、数据流、领域、约束,以及人。

(有幸看过高手写代码,确实直接能上手,可以直接从目录结构,文件命名和方法命名,配合注释直接推导出功能,这也是后续学习的目标)

他们构建的系统能够让变更成本很低,让复杂性被控制,让代码的意义清晰可见。

而且他们解释得如此简单,以至于让人觉得理所当然。这就是资深开发者的特质。

我希望这篇文章能帮你用一个全新的视角看待前端开发。如果我有遗漏的地方,可以在评论区补充,让更多人看到。

相关推荐
李昊哲小课2 小时前
HTML 完整教程与实践
前端·html
GISer_Jing2 小时前
React 18的createRoot与render全面对比
前端·react.js·前端框架
我叫汪枫2 小时前
React Hooks原理深度解析与高级应用模式
前端·react.js·前端框架
我叫汪枫2 小时前
深入探索React渲染原理与性能优化策略
前端·react.js·性能优化
阿智@113 小时前
推荐使用 pnpm 而不是 npm
前端·arcgis·npm
伍哥的传说3 小时前
QRCode React 完全指南:现代化二维码生成解决方案
前端·javascript·react.js·qrcode.react·react二维码生成·qrcodesvg·qrcodecanvas
IT_陈寒3 小时前
Vite 5.0 终极优化指南:7个配置技巧让你的构建速度提升200%
前端·人工智能·后端
listhi5203 小时前
Map对象在JavaScript循环中的使用
开发语言·前端·javascript
在未来等你3 小时前
Kafka面试精讲 Day 16:生产者性能优化策略
大数据·分布式·面试·kafka·消息队列