javascript - React Relay 项目目录结构组织

标签 javascript reactjs relayjs

我开始使用 Relay 构建项目而且我[对我的项目结构有点困惑(我确实使用同构方法)。

这是我正常的 React 项目结构:

-- project
     |-----src
     |       |---components (React components with their respective .css styles)
     |       |---containers (React/Redux containers)
     |       |---helpers (Helpers, common to components and containers)
     |       |---redux (Redux stores)
     |       server.js (node server code)
     |       client.js (client code)
     |       routes.js (routes)
     |       config.js (application config)
     |
     |-----static
     |       |-- ... (static files)
     |-----webpack 
     |       |-- ... (webpack configuration files)

在 React/Redux 中,容器在概念上是一个“智能组件”(参见 this link,并且在组件(纯 React 组件)和容器(带有 redux 数据的“智能组件”)中区分它们是有意义的

现在,当我转向 Relay 时,容器在概念上仅与数据相关,与 React 组件相关(参见 here),这将稍微改变上面的目录结构。

问题:

a) 我应该将组件和容器保存为单独的目录吗?

b)我是否应该将它们称为所有组件并将其结构为:
  src
   |------ containers
               |-------- itemcontainer.js (relay container)
               |-------- itemcomponent.js (react component)
               |-------- itemcomponent.css (react component styling)

在这种情况下,如何处理没有关联数据的组件?

c) 我应该做一些不同的事情吗?

在 React/Relay 架构中组织组件、容器和样式的最佳方法是什么?

组织 React/Relay 项目结构的最佳方法是什么?

最佳答案

您的问题确实是一个偏好问题,但如果您想最大限度地提高开发人员体验:
最好不要把你的“容器”和“组件”分开,这样便于改变组件的数据需求。无论您是使用终端还是 GUI(如文件资源管理器、Finder 或 VSCode)来导航项目,将有关组件的所有内容放在一个目录中都可以轻松进行更改,尤其是在长期和大型团队中,你想限制摩擦的地方。只需考虑遍历文件结构,可能会阻止“懒惰”的开发人员修复错误或执行简单的任务。
我会建议这种结构,但要持保留态度:

src
   |------ components
         |-------- ComponentName
               |-------- index.js          (relay container)
               |-------- ComponentNameUI.js  (react component)
               |-------- ComponentName.css (react component styling)
   |------ ui
         |-------- ComponentName
               |-------- index.js          (react component)
               |-------- ComponentName.css (react component styling)
您所有的“智能”中继组件(“容器”+“演示文稿”,您称之为“组件”)都将位于 components/ 中。目录,以及与 Relay 没有任何关系的“愚蠢”组件,例如设计系统的组件(如 ButtonAvatar 等),将在 ui/ 中目录(您可以随意命名)。
如果您想要 简单的方法为了安置和执行上述结构,我创建了一个 CLI,relay-butler , 接受 GraphQL fragments并输出该结构中的继电器组件。默认情况下它是 TypeScript,但您可以根据需要自定义模板并将其更改为 JavaScript。
我还建议阅读有关 Thinking in Relay 的页面在 relay.dev docs,它不会告诉您如何构建项目,但确实让您了解您可能想要如何进行它。
但最重要的是,正如 create-react-app 的合著者之一 Dan Abramov ,曾经说过:“移动文件直到感觉正确”(https://twitter.com/dan_abramov/status/1042364018848145408)。

关于javascript - React Relay 项目目录结构组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43016381/

相关文章:

javascript - Googlebot 和空 CORS 响应

javascript - Angular ui 路由器 : 1 url trigger both parent and child state

javascript - React Native : Background image loads as the last component, 尽管它是先添加的

javascript - 当我呈现除主页以外的不同路线时,html 未加载源,express-handlebars-Node.js

带有函数的 Javascript 语法

javascript - Uncaught Error : Invariant Violation: findComponentRoot(. .., ...$110) : Unable to find element. 这可能意味着 DOM 意外发生了变化

reactjs - 类组件中的 React.useMemo

react-native - Relay Modern,Load More 不起作用,hasMore() 一直返回 false

reactjs - 有没有办法在没有 GraphQL 的情况下使用 Relay?

react-router - 中继/路由器登录突变?