大开关/箱功能或多个独立功能

时间:2019-07-16 17:53:49

标签: reactjs react-native react-redux

我正在使用React Native构建待办事项应用

当我单击待办事项时,会打开一个组件,可以在其中编辑有关它的所有信息(小时,日期,待办事项名称,说明,标签等)。

我在为每个属性创建一个函数还是使用“开关”创建一个大函数之间犹豫。

我觉得有一个大功能可以使它变得更加清晰,但是我不知道将来对性能和可维护性的影响。

例如:

editName = () => {
  dispatch(..)
}

editDescription = () => {
  dispatch(...)

}

editHour = () => {
  dispatch(...)

}

...

todo = () => {
  switch(){
    case 'editName':
      ...
    case 'editDescription':
      ...
    case 'editHour':
      ...
  ...

  }

1 个答案:

答案 0 :(得分:2)

在react-redux上下文中,通常将使用选项A。创建一个名为mapDispatchToProps()的函数,并将其与connect()挂钩到存储中。在这种情况下,性能差异可以忽略不计,并且易于维护(只需添加和删除键值对)。

const mapDispatchToProps = (dispatch) => {
   return {
      editName: (args) => {
        dispatch(editName(args))
     },
      editDescription = () => {
        dispatch(editDescription(args))
     }

   }
}

export default connect(null, mapDispatchTorProps)(Component)

在选项B(切换用例)中,出现了如何访问dispatch方法的问题,因为该方法仅在与商店直接交互时可用。您不能从其他事件处理程序调用{​​{1}}。目前还不清楚如何将分派绑定到返回的案例。

您的待办事项功能必须如下所示:

dispatch

但是同时,您将如何传递const todo = (dispatch, actionType, actionArgs) => { switch(actionType){ case "editname": dispatch(editname(actionArgs)) } } 来使切换情况正常工作,以及动作参数又如何呢?然后回到如何甚至可以访问商店外部的调度。

action-type不可执行,调度未定义。

这是一种执行反模式的绕行方式,只会增加代码的复杂性,而选项A非常干净且易于使用。