Javascript 重复模式';设置';行动vs';添加'/';拆下';行动

Javascript 重复模式';设置';行动vs';添加'/';拆下';行动,javascript,redux,react-redux,Javascript,Redux,React Redux,我目前正在使用redux创建一个应用程序。我有一个问题,关于我们行动的结构。我将把它提炼成下面的一个基本例子。我们使用的是不可变的JS,我们的存储是由不可变的对象构建的 我们有一个输入元素,当用户单击数组中的某个项目时,该元素将添加或删除到存储中。有两种基本的组织方式。为简单起见,假设存储区由单个名称映射组成,例如“names=map()”,其中映射如下所示: { 名字1:对 名字2:对 } 战略1 使用单个操作:设置\u选定\u名称 战略2 使用两个操作:选择\u名称,取消选择\u名称 根据我

我目前正在使用redux创建一个应用程序。我有一个问题,关于我们行动的结构。我将把它提炼成下面的一个基本例子。我们使用的是不可变的JS,我们的存储是由不可变的对象构建的

我们有一个输入元素,当用户单击数组中的某个项目时,该元素将添加或删除到存储中。有两种基本的组织方式。为简单起见,假设存储区由单个名称映射组成,例如“names=map()”,其中映射如下所示:

{ 名字1:对 名字2:对 }

战略1

使用单个操作:设置\u选定\u名称

战略2

使用两个操作:选择\u名称,取消选择\u名称

根据我对redux/react的理解,以及在将代码从策略2重构到策略1之后——在我的团队的要求下——我感觉到了这种重构带来的大量代码气味,但在表达它们时遇到了困难。这感觉就像我们正在将应该从存储区转移到组件中的逻辑,以了解“下一个状态”应该是什么

当用户单击某个项目时,我们需要查看组件中的当前状态,并了解该单击是删除项目还是添加项目。然后,我们将新状态直接传递到操作上,而不是使用存储/还原器来“计算”它。这样做的最终效果是使约简变得极其简单,使组件内的逻辑变得复杂,或者至少使其不那么冗长

转向:

这是选举吗?this.props.selectName(名称):this.props.unselectName(名称)

进入:


this.props.setSelectedNames(this.props.selectedNames.update(name,v=>!v))

在redux中,您可以在action Creator和Reducer中自由添加业务逻辑,这实际上取决于您的设置和组织

就我个人而言,我更喜欢减肥药和减肥药

策略1,据我所知,它假设一个胖动作创建者,在这里你检查一些逻辑,在一些计算之后,它为减速器设置一个有效负载来处理

在我看来,这可以很好地工作,并保持减速器非常简单,只负责更新状态

感兴趣的物品:

附言: 你也可以考虑一个动作,它基于某些逻辑来发送调度其他动作,因此使用混合的方法(策略1/2)。
在redux中,您可以在action creators和Reducer中自由添加
业务逻辑,这实际上取决于您的设置和组织

就我个人而言,我更喜欢减肥药和减肥药

策略1,据我所知,它假设一个胖动作创建者,在这里你检查一些逻辑,在一些计算之后,它为减速器设置一个有效负载来处理

在我看来,这可以很好地工作,并保持减速器非常简单,只负责更新状态

感兴趣的物品:

附言: 你也可以考虑一个动作,它基于某些逻辑来发送调度其他动作,因此使用混合的方法(策略1/2)。
const setLocation = (id:number):ActionType => {
  // check some logic here, and dispatch the right set of actions
  return dispatch => {
        dispatch(getWeather(id))
        dispatch(getForecastDaily(id))
        dispatch(getForecastHourly(id))
      }
    }