【发布时间】:2020-01-19 15:04:53
【问题描述】:
在开发组件时,我发现自己想知道组件是否应该直接从存储中获取它的数据,或者让它通过 props 传递 - 大概是让父级(或任何更高的祖先)来获取它。此外,我倾向于不区分智能/哑组件。 你怎么看待这件事?有什么取舍?
在我看来,直接获取与通过道具传递的权衡是:
- 使组件更难测试,因为您不必在每次测试时都为它模拟商店。
- 意味着更小、更简洁的代码
- 使组件的可移植性降低,也就是说您不能简单地更改从商店获取的内容
- 性能较差,如果您渲染几个相同类型的实例(例如,如果您要制作一百个元素的长列表,则让父级使用一个 useSelector 获取所有内容然后通过 props 传递数据会更高效,而不是让每个列表项自己获取数据)
【问题讨论】:
-
我只会让父组件从存储中获取数据,如果它正在做某事的话。换句话说,父母应该有充分的理由拥有数据,只是将道具传递给孩子似乎是毫无意义的管道。