javascript - 我该如何改进这个 redux Action 创建器?

标签 javascript redux flux

我有这个 Action :

import uuid from 'uuid'
import { findPaymentCategoryByName } from './Categories/selectors'
import { addPaymentCategory } from './Categories/actions'

export const addPayment = payment => (dispatch, getState) => {
  const id = uuid.v1()
  const { paymentCategory, ...paymentValues } = payment
  let existentPaymentCategory = findPaymentCategoryByName(getState(), paymentCategory.name)

  if(!existentPaymentCategory) {
    existentPaymentCategory = dispatch(addPaymentCategory(paymentCategory)).payload
  }

  dispatch({
    type: 'ADD_PAYMENT',
    payload: { payment: { ...paymentValues, id, paymentCategoryId: existentPaymentCategory.id }}
  })
}

他的行为创建了一笔付款。当类别不存在时,将创建该类别。

但我读到,在一个操作中更改两个商店并不好。那么,有人知道我该如何改进这个 Action 吗?

最佳答案

您可以遵循“告诉而不是询问”的原则 “findPaymentCategoryByName”方法可以调用“paymentCategoryByName”,如果该类别不存在,则该方法自己负责创建该类别。

有关 TellDontAsk 的更多详细信息请参见此处: http://martinfowler.com/bliki/TellDontAsk.html

export const addPayment = payment => (dispatch, getState) => {
  const id = uuid.v1()
  const { paymentCategory, ...paymentValues } = payment
  let existentPaymentCategory = PaymentCategoryByName(getState(), paymentCategory.name)

  dispatch({
    type: 'ADD_PAYMENT',
    payload: { payment: { ...paymentValues, id, paymentCategoryId: existentPaymentCategory.id }}
  })
}

关于javascript - 我该如何改进这个 redux Action 创建器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40413357/

相关文章:

javascript - 根据单击的按钮将样式应用于单独的元素

javascript - Redux 开发工具不适用于大型操作负载

php - 使用 JavaScript API 从 LinkedIn 获取个人资料详细信息

reactjs - 父组件已连接到 redux 存储,但子组件不会在状态更改时重新渲染

javascript - Redux store没有有效的reducer,有combineReducers和有效的reducer

javascript - react native router flux 遇到两个 child 用同一个key

javascript - React Action Callback 做转换最佳实践

javascript - 需要帮助构建 React 应用程序

javascript - 通过 React Router 的 withRouter HOC 转发 ref

javascript - 显示 : 'none' 时读取正确尺寸的解决方法