在ReactJS组件中,我经常看到与UI事件相对应的回调(例如onFormSubmit
)通过props
库添加到connect
对象。
为什么这样做?当然,如果onFormSubmit
被创建并且仅由该组件使用,它可以是私有的还是直接添加到组件中?
是否出于可测试性原因?
编辑:是因为对商店的dispatch
功能的访问是受控制的,并且可以通过连接访问,以避免组件依赖商店?
答案 0 :(得分:2)
与connect
一起使用时,通过道具传递回调可让他们按照您的建议发送动作。
更一般地说,当回调必须在层次结构中进一步修改状态时,一个好方法是将它传递给道具。
答案 1 :(得分:2)
我说背后有一些主要原因,彼此相关:
建筑/设计将组件拆分为容器和演示组件。
自上而下的数据流。
以上设计决策产生以下规则:
容器组件应该保留其中的逻辑,而演示组件应该只显示数据。当然,这是最纯粹的场景,但实际上就像你说的那样可以处理表现性组件中的一些简单逻辑。然而,保持分裂主要是为了保持演示组件的清洁,同时由于反应的自上而下的性质,能够将逻辑重用于各种表示组件(如果可能)。
说到redux插入反应。您完全正确,只有容器组件(顶部组件)应连接到商店。并且只能通过道具将特定的状态组件传递给特定的表示组件。
也许我会简化一下,但是演示组件应该比容器更具优先性。因此,如果您想知道某些组件是应该是容器还是表示 - >由于系统和复杂性的增长而难以保持这样的决定 - >>最终将这样的组件转换成容器。