我正在尝试使用 Vuex 完成一项基本任务,但由于某种原因它无法正常工作,经过广泛搜索后,我非常感谢任何帮助。
我正在尝试做的事情:
使用新属性(对象)更新我商店中的对象列表(对象)。
出了什么问题:
在我什至分派操作以从我的组件提交新对象之前(我正在通过 mapActions 访问操作),列表中任何现有对象中的某些属性都会更新为与我的组件中的输入/v-models 相关联的值. 正如我的代码在下面显示的,我知道对对象的反应是一个问题,所以我Vue.set(...)
按照文档使用(Mutations Follow Vue's Reactivity Rules)
为什么我不认为我在做一些完全愚蠢的事情......(但可能是错的)
当我在 DevTools 中检查突变时,突变按预期记录,当我按下“提交”/“全部提交”时,列表中的现有对象不再响应输入中的更改。这显然是我期望发生的行为,因为该操作实际上应该将更改提交给状态。然而,为什么它不能在代码中工作,而只能在 devtools 中工作?
对于可能是一个基本问题,我再次道歉,但我看到其他一些人有类似的问题,并且没有书面解释我们缺少什么......
初始状态
const state = {
quotes: {}
}
突变
mutations: {
[types.ADD_QUOTE] (state, payload) {
Vue.set(state.quotes, payload.id, payload)
}
}
行动
actions: {
addQuote ({ commit }, payload) {
commit(types.ADD_QUOTE, payload)
}
}
零件
<template>
<div class="quote-block">
<label>price</label>
<input type="text" v-model="quote.price">
<label>id</label>
<input type="text" v-model="quote.id">
<!-- Just displaying props below -->
<div>{{ quote.item }}</div>
<div>{{ quote.vendor }}</div>
<div>Qty: {{ quote.qty }}</div>
<button @click="addQuote(quote)">Submit quote</button>
</div>
</template>
<script>
import { mapActions } from 'vuex'
export default {
props: {
vendor: String,
item: String,
qty: Number
},
data () {
return {
quote: {
id: '',
price: '',
timestamp: Date.now(),
vendor: this.vendor,
item: this.item,
qty: this.qty
}
}
},
methods: {
...mapActions([
'addQuote'
])
}
}
总而言之,在 devtools 中,我看到了我设置的对象的值id
和price
变化state.quotes
——它们显然与我的组件的 v-model 相关quote.price
联quote.id
。只有当我在 devtools 中“全部提交”时,这些对象的属性才会停止更改。为什么commit
动作中的方法不进行这些提交?