组件
scratch-gui 将其 React 代码拆分为两个扮演非常不同角色的目录:src/components/ 用于展示,src/containers/ 用于接线。本页描述组件侧以及两者之间的拆分。容器侧在容器中介绍。
容器/组件拆分
规则很简单:
- 组件(
src/components/)渲染 UI。它通过 props 接收它需要的一切,不导入 Redux store 或 VM。给定相同的 props 它渲染相同的内容,这使它容易推理和复用。 - 容器(
src/containers/)知道 store 和 VM。它选择组件需要的状态、绑定回调,并用那些 props 渲染匹配的组件。
让展示不知道数据来自哪里,这就是同一个视觉组件可以在编辑器中被 Redux 驱动、在播放器中被不同状态驱动、或在测试中被 props 驱动的原因。
并非每个文件都完美地落在线的一侧。一些组件用 React hooks 或 useState 持有本地 UI 状态(布局测量、悬停、拖动),因为那种状态不值得放进 Redux。src/components/gui/gui.jsx 是一个大例子:它在本地管理舞台面板调整大小和窄布局检测,同时仍然从连接的容器接收其数据 props。组件避免的是直接触及全局 store。