【发布时间】:2018-03-29 08:26:48
【问题描述】:
在处理 Vue.js + Vuex 时,你在代码中处理重复的方式是什么。我有两个非常相似的突变。
第一个用于服务:
function setServiceItem(state, {model, value}) {
const service = state.order_services
service[model] = value
if (model === 'service') {
service.unit_price = value.price
}
updatePrice(service)
}
第二个是材料:
function setMaterialItem(state, {model, value}) {
const material = state.order_material
material[model] = value
if (model === 'material') {
material.unit_price = value.price
}
updatePrice(material)
}
这两者非常相似,但由于 Vuex 的设计方式,我在将其中两个合并为一个突变而不是两个突变的方式上非常有限.
我本可以添加第三个参数(例如位置)并执行类似的操作
function setMisc(state, {model, value, location, eventForPriceAssignment}) {
const item = state[loc]
item[model] = value
if (model === eventForPriceAssignment) {
item.unit_price = value.price
}
updatePrice(material)
}
但这也会使函数更加复杂,并且需要我在每次提交时传递更多参数,这将完全抹杀 DRY 的任何好处。
【问题讨论】:
标签: javascript ecmascript-6 vue.js vuex