原文链接:Smart and Dumb Components
作者:Dan Abramov
我发现当我写React应用时有一个非常有用的小模式(pattern)。如果你使用React有一段时间了,你应该早就发现它了。这篇文章解释的很好(我也翻译了),不过我想加多一些观点。
你会发现你的组件要是能分成两类,复用起来会变得更轻松。我称他们两类分别为Smart
和Dumb
,我也听说过Fat
和Skinny
,Stateful
和Pure
,Screens
和Components
等等。这些虽然不完全一样的,但本质是相类似的。
我的 dumb 组件:
- 对应用的其他部分没有依赖,例如 Flux actions 或者 stores。
- 通过
this.props.children
通常允许放在容器里。(Often allow containment via this.props.children) - 统一通过 props 来获取数据和回调函数。
- 有 CSS 文件关联他们。
- 几乎没有它们自己的 state。
- 或许里面也使用了其他的 dumb 组件。
- 例子:Page, Sidebar, Story, UserInfo, List.
我的 smart 组件:
- 包含了一个或多个 dumb 或者 smart 组件。
- 在 Flux stores 中保存 state 并 通过 objects 的形式传递给 dumb 组件。
- 访问 Flux actions 并作为回调函数提供给 dumb 组件。
- 从来没有它们自己的 CSS 样式。
- 几乎不通过它们自己生成 DOM ,用 dumb 组件来布局。
- 例子:UserPage, FollowersSidebar, StoryContainer, FollowedUserList。
我将它们两类放在不同的文件夹来让它们的区别更明确。