gpt4 book ai didi

vuejs2 - Vue2 + Vuex 提交不提交(没有 Vue devtools)

转载 作者:行者123 更新时间:2023-12-05 01:36:55 31 4
gpt4 key购买 nike

我正在尝试使用 Vuex 完成应该是一项基本任务,但由于某种原因它不起作用,经过广泛搜索后,我非常感谢任何帮助。

我想做什么 :

使用新属性(对象)更新我商店中对象的列表(对象)。

怎么了 :

在我什至调度操作以从我的组件提交新对象之前(我正在通过 mapActions 访问该操作),列表中任何现有对象中的某些属性都会更新为与我的组件中的输入/v-models 相关的值.正如我的代码如下所示,我知道与对象的 react 性是一个问题,所以我正在使用 Vue.set(...)根据文档 ( Mutations Follow Vue's Reactivity Rules )

为什么我不认为我在做一些完全愚蠢的事情......(但可能是错的)

当我在 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 的对象内更改- 它们显然与 quote.price 的 v 模型有关和 quote.id在我的组件中。只有当我在 devtools 中“全部提交”时,这些对象的属性才会停止更改。为什么不是 commit进行这些提交的操作中的方法?

最佳答案

你掉进了对象引用陷阱。
引用是一个对象,它作为有效负载传递给操作。当您提交该有效负载时,它会将引用保存到您的状态中。

现在组件和商店都指向同一个对象。

解决方案是使用扩展运算符或 Object.assign 将输入复制到新对象中。

始终在mutators中复制有效负载通常是一个好习惯(如果它是一个对象)

function(state, payload){
Vue.set(state.quotes, payload.id, {... payload });
}

关于vuejs2 - Vue2 + Vuex 提交不提交(没有 Vue devtools),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47893923/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com