我有一个React / Redux应用程序,其中有许多可以通过上下文菜单,快捷方式或单击按钮以各种方式调用的全局命令。
然后在与命令相关的位置处理这些命令(例如,如果命令是“save”,则由文本编辑器组件处理)。
到目前为止,我已经以一种错综复杂的方式做到了这一点:
{ type: "COMMAND_EXEC", name: "save_note" }
,在reducer中填充状态属性“current_command”componentWillReceiveProps
,我检查是否有“current_command”属性并处理它。它有点有效,但它过于复杂,我怀疑它可能会导致问题,因为有越来越多的组件和命令。我想我正在使用Redux操作作为事件,这可能不是一个好主意。
所以我想知道是否有更合适的方法来处理Redux中的这类事件?
答案 0 :(得分:0)
答案取决于预期这些命令的作用:
这些命令是否正在进行非常严格依赖于组件状态的UI更新?
这些命令是在api通话/导航到其他路线等吗?
案例(2)
View(React Component)不应该是执行此命令的理想位置。相反,您应该将该命令作为操作执行。文本编辑器组件应该调度由redux处理的操作“save”。任何其他XYZ组件也可以调用相同的“保存”操作。如果操作需要text-component的当前状态,则应该在reducer中保持此状态。
案例(1) - UI更新
除非需要,否则将UI状态保留在reducer中并不是一个好主意。但有时,你需要这样做。请参阅以下示例:
您有一个“关闭”和“开启”的开关,testSlice = append(testSlice, Row{/*...*/})
组件应该是保持自己的Switch
的理想位置。更新后,它会通过state.isOn
让其父母知道。
现在,如果外部动作想要翻转开关怎么办?最好的方法是将this.props.onUpdate
组件的state
提升到父级别,让父级处理Switch组件的所有内容。
同样,您可以将UI组件的“状态”提升为reducer,并允许操作修改redux存储的状态。 View组件只会监听商店更新并相应地重新渲染。
你应该做的是:
Switch
这将使应用程序变得混乱且难以管理。
可能的解决方案: