文件结构

是否有推荐的方式来组织 React 项目?

React 在对于你如何将文件放入文件夹中不持有意见。也就是说,你也许想考虑生态系统中的一些常用方法。

按照功能或者路由来分组

组织项目的一种常见方法是将 CSS,JS 和测试文件一起放入按功能或路由分组的文件夹中。

common/
  Avatar.js
  Avatar.css
  APIUtils.js
  APIUtils.test.js
feed/
  index.js
  Feed.js
  Feed.css
  FeedStory.js
  FeedStory.test.js
  FeedAPI.js
profile/
  index.js
  Profile.js
  ProfileHeader.js
  ProfileHeader.css
  ProfileAPI.js

“功能”的定义不是通用的,它取决于你选择的划分粒度。如果你不能想出一个顶级文件夹的列表,你可以询问用户你的产品主要由哪些部分组成,并使用他们的心智模型作为蓝图。

按照文件类型来分组

组织项目的另一个流行的方式是将相似的文件分到一起,比如说:

api/
  APIUtils.js
  APIUtils.test.js
  ProfileAPI.js
  UserAPI.js
components/
  Avatar.js
  Avatar.css
  Feed.js
  Feed.css
  FeedStory.js
  FeedStory.test.js
  Profile.js
  ProfileHeader.js
  ProfileHeader.css

有些人会喜欢进一步深入,根据组件在应用中所扮演的角色将他们分到不同的文件夹中。举个例子, Atomic Design 是一个基于该原则构建的设计方法论.请记住,将这些方法看成有用的案例而不是严格的规则来处理,往往更有成效。

避免太多嵌套

JavaScript 项目中的深层目录嵌套会有许多痛点。在目录之间书写相对的 import 以及在移动文件时更新这些 import 都变得更加困难。除非你有一个非常有说服力的理由来使用深层文件夹结构,否则请考虑将项目自身限制为单个项目中最多嵌套三到四层文件夹。当然,这只是一个建议,它可能与您的项目无关。

不要过度思考这个问题

如果你刚开始一个项目,不要花超过五分钟在选择一个文件结构上。从以上方法(或者你自己想到的)中任意挑一个然后开始编程吧!在写完一些真实的代码之后,你可能会想重新考虑它。

如果感觉完全卡住,请将所有文件保存在一个单一的文件夹中。最终它会变得足够大,以至于你会想要从其他文件中分离出一些文件。 到那个时候,你将有足够的知识去分辨你最经常编辑的文件。 一般来说,保持经常变化的文件彼此靠近是一个好主意。 这个原则被称为“托管”。

随着项目规模越来越大,在实践中往往会混合使用上述几种方法。所以在一开始选择“正确”的方法并不是很重要。