大部分组件都可以归类为“容器型组件”和“展示型组件”。在开发过程中会发现这样更容易被重用和理解。这样做的好处是,分离关注,你可以更好的理解app和UI。更易复用,同样的展示组件可以在不同的状态源、数据源中使用。也可以封装成容器组件,在未来重用它们。 下面说明两种组件的用途以及设计原则。
容器组件 Container
- 只关心运作方式。 可能同时包含子级容器组件和展示组件,但大都不含DOM标签,而含他们自己所用的wrapping div,从不用自己的样式。
- 容器组件维护多个状态。 通常由高阶组件生成,比如Redux里的connect(),Flux Utils里的Container.create() 为展示组件或其他组件提供数据和方法。
- 只属于该container的UI操作(比如开关按钮)等等的放到state而不是store里。
展示组件 Components
-
复用度可能会很高
-
只关心展示样子,包含dom结构及样式。
-
可能会同时包含子级容器组件和展示组件,一般含DOM标签和自定的样式。 展示组件是无状态的,可以用箭头函数定义。 即使有,也仅仅是UI的状态变量。除了这种情况之外,一般写成函数渲染组件。 不依赖app其它组件,比如flux的actions和stores。
-
不会定义数据如何读取,如何改变。
-
只通过this.props接受数据和回调函数。