[译]Presentational and Container

2017-12-29  本文已影响173人  趁你还年轻233

原文:https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0


在写React App的过程中,我发现一个很巨有用的简单的设计模式。如果你写过一段时间的React,你也许已经发现它了。这篇文章很好的解释过一些:Container Components,但是我想新增更多需要注意的点进来。

如果你把组件分成2个目录的话,你将会发现你的组件更容易重用和推理。我称它们为Container和Presentainal组件,但是我也曾经听过Fat and Skinny ,Smart and Dumb , Staful and Pure ,Screens and Components等等。这些完全不一样的东西,其实核心思想是一样的。

我的presentations组件

我的container组件

我把他们放在不同的文件夹下,来确保这种设计模式的实现。

这个方法的好处

记住这一点,components don't have to emit DOM.他们仅仅需要提供在UI关注点处提供构图边界。

什么时候需要引入Containers?
我建议大家在开始构建APP的时候,只用presentational组件。事实上你将意识到你在传递太多的props到中间组件。当你意识到一些组件不用使用props去接受数据的时候,但是只是把他们转发出去,而且当孩子们需要更多的数据的时候,你都必须重新连接所有这些中间组件,这个时候就是你需要引入container组件的时候。这样的话你就能够获得数据属性和行为属性,把他们传递给后代组件,传递过程不需要给树中间的相关组件造成负担。

这是一个不断进行的重构过程,所以不要试图在第一时间就把所有事情都做对。当你用这个方法去实践的时候,你将形成一个直觉,这个直觉会告诉你什么时候需要抽取出container,就像你知道什么时候需要抽象一个函数出来一样。我的免费Redux视频教程也许可以帮到你!

其他的二分法
想理解清楚presentational组件和containers组件区别不仅仅依赖一个技术就可以完成。相反,这只是一种目的。

相比之下,这里有一些相关的(但不同的)技术区别:

不要把表象和容器组件分离作为教条。有时候没有关系,或者很难划清界限。如果您不确定具体组件是表示性还是容器,则可能为时尚早。不要流汗!

例子:
一个完美演绎展示组件和容器组件的例子

拓展阅读:

脚注:
在早些版本的文章中,我把他们称作"smart"和"dump"组件,但是这么称呼对于展示组件来说有些不公平,命名的意义在于真正的去解释组件的意义。希望你也是这样!

早些版本的文章中,我说展示组件中只能包含展示组件。现在我不再认为是这样。
一个组件到底是展示组件还是容器组件,取决于它的内部细节。你可以用一个容器组件直接替换表示型组件,而不用修改任何的调用站点。因此,展示型组件和容器型组件能够很好地包含其他的展示型组件或者容器型组件。

期待和大家交流,共同进步,欢迎大家加入我创建的与前端开发密切相关的技术讨论小组:

努力成为优秀前端工程师!

上一篇 下一篇

猜你喜欢

热点阅读