【发布时间】:2015-07-08 19:51:21
【问题描述】:
我的团队目前正在开发一个使用 Facebook 的 Flux 架构用 ReactJS 编写的大型应用程序。它现在仍处于起步阶段,但很快就会变得很大。它将有 50 多个小组件视图、大量动作、商店和动作创建者。
目前,我们的目录结构看起来像 -
App
|___ module_1
| |___ components
| | |___ component1.react.js
| | |___ component2.react.js
| |___ module1ActionCreators.js
| |___ module1Constants.js
| |___ module1store.js
|
|___ module_2
|___ ... (same structure as above)
这种方法的一个问题是 module_x 文件夹的数量会随着应用程序的增长而变得越来越大。
关于他们如何构建应用程序,有人有什么要分享的吗?根据我们的经验,Facebook 的示例应用程序(待办事项和聊天)具有适合小型应用程序的架构,但是一旦这些商店、组件和操作的数量增加,管理起来就会变得更加困难。
提前致谢。
【问题讨论】:
-
如果一个组件足够通用且足够可重用,那么将其分解为自己的 npm 模块。如果您大方,请将其开源并在react-components.com 上列出
-
我认为这是大型应用程序的必经之路。但是你的模块可能太小了。我的应用程序目前按类型排序,如@fisherwebdev 的答案和每个通量示例所示,但我相信这并不能很好地扩展。我已经在 store 文件夹中有 25 家商店。我打算“按功能排序”而不是“按类型排序”,这些功能中的每一个实际上都是一个小的“应用程序”,它将插入“核心”应用程序。这些中的每一个都应该只依赖于“核心”模块。这只是一个想法。尚未设计。
-
@RoryKoehein 您是否设计了一些尚未尝试的东西?我认为这是正确的方法。我们就是这样做的,除了我们还在功能内再次按类型排序,导致大量额外文件夹加载,其中只有几个文件。
-
@froginvasion 是的,我们上个月终于做到了。我们将整个应用程序移动到一个“核心”文件夹中,现在正在将模块一个一个地移出。我们还在模块内按类型排序,我同意这感觉有点多。每个模块有 1 到 5 个商店 atm。可以通过将模块从应用程序入口点中删除它们来将它们排除在应用程序之外,在那里它们被导入和加载。它们只依赖于核心。当核心或其他模块需要使用模块中的代码时,他们必须通过外观检查模块是否可用(模块也在 React 视图中的
context上共享)。
标签: reactjs directory-structure reactjs-flux