【问题标题】:Should the route handlers use containers or presentational components?路由处理程序应该使用容器还是展示组件?
【发布时间】:2016-03-01 17:07:25
【问题描述】:

例如:

在启动我的应用程序时,我创建了一个连接组件,其中包含一些用于调度操作的回调,并呈现单个展示组件,该组件又包含构成“屏幕”(或“场景”)的许多其他展示组件。

但后来我意识到其中许多组件都进行了不必要的渲染,因为它们中的每一个都需要不同的状态部分。

那么,解决方案是什么?也许将一个呈现许多容器的单个表示传递给路由处理程序,并且每个容器都连接到它关心的状态?那么,如果两个组件使用相同的状态部分,那么它们是否应该是不同的容器呢? 而且,如果我采用这种方法,是否有一个文件夹“视图”来存储这些路由处理程序?

你是怎么处理的?

谢谢!

【问题讨论】:

  • 你能澄清一下“不必要的渲染”是什么意思吗?您能否提供一些代码示例来突出您遇到的问题?
  • @CalvinBelden 这个容器连接到大部分状态,但并不是每个组件都需要它。结果,当状态的一部分发生变化时,许多组件会重新渲染,尽管它们并不关心变化。

标签: reactjs react-native redux react-redux


【解决方案1】:

shouldComponentUpdate() 放在这些组件上,这不会是什么大问题。有关详细信息,请参阅 Advanced PerformanceA Deep Dive into React Perf Debugging。这正是 connect() 生成的组件对 React Redux 所做的。

也就是说,请随意connect() 下面的组件。绝对没有义务 connect() 路由处理程序并将组件留在演示文稿下方。我建议从演示组件开始,当它们变得难以使用并且需要向下传递太多道具时,将其中一些包装在 connect() 中。

【讨论】:

  • ShoukdConponentUpdate 是个好主意。关于第二段,您建议开始向路由器传递一个呈现许多演示文稿的连接容器。然后,如果需要,将它们连接起来,因此如果它们都以连接方式结束,那么路由处理程序组件将成为呈现许多容器的表现形式。对吗?
  • @Emilios1995 差不多。您也可以在方便时嵌套容器。请参阅我的free Egghead course 的第 20 至 23 课。
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多