我有这个 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/