我正在努力完成Vuex的基本任务,但由于某种原因,它不起作用,在四处寻找后,我非常感谢任何帮助。
我想做的是:
使用新属性(对象)更新“我的存储”中对象的列表(对象)。
出了什么问题:
在我从我的组件分派动作以提交新对象之前(我正在通过mapActions访问该动作),列表中任何现有对象中的某些属性都会使用绑定到我的组件中的inputs/v-models的值进行更新。正如我下面的代码所示,我知道与对象的反应性是一个问题,所以我使用Vue。集合(…)
根据文档(突变遵循Vue的反应性规则)
为什么我不认为我在做一些完全愚蠢的事情...(但我可能错了)
当我在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
的值在我设置为状态的对象中发生变化。quotes
-它们显然与quote的v型车型有关。价格
和报价。我的组件中的id
。只有当我在devtools中“提交所有”时,这些对象的属性才会停止更改。为什么操作中的commit
方法不进行这些提交?
你掉进了对象引用陷阱。引号是一个对象,作为有效载荷传递给操作。当您提交有效负载时,它会将引用保存到您的状态中。
现在,组件和存储都指向同一个对象。
解决方案是使用spread操作符或对象将输入复制到新对象中。分配
它通常是一个良好的做法,总是复制有效载荷在变异器(如果它是一个对象)
function(state, payload){
Vue.set(state.quotes, payload.id, {... payload });
}
我很难得到在商店工作的promise。 我通过一个动作调用突变,这似乎很有效。 该操作被导入到我的组件中: 然后叫: 这一切看起来都有效,但是当我检查Vue开发工具时,Vuex基本状态保持不变,并且我有一个活动突变(setPlace)。我可以点击“全部提交”来提交有效的突变。 在我的组件中,我在getter mapLocation上使用了一个监视程序,当我单击Commit All时会触发该监视程序
问题内容: 好吧,我试图通过按Enter提交表单,但不显示提交按钮。我不希望尽可能地使用JavaScript,因为我希望所有功能都可以在所有浏览器上正常工作(我知道的唯一JS方式就是使用事件)。 现在,表单如下所示: 哪个效果很好。当用户按下Enter键时,提交按钮将起作用,并且该按钮在Firefox,IE,Safari,Opera和Chrome中不显示。但是,我仍然不喜欢该解决方案,因为很难知道
Commit(提交)就是把修改保存到仓库里。 用法 git commit 选项 -a(--all),把所有修改与删除自动添加到暂存区然后提交。不包含未跟踪文件。 -m(--message),设置提交信息。 练习 1,打开 resources.md ,添加一行文字: # 相关资源 保存文件,再去修改一下: git commit -am '设置相关资源文档标题' 这次用了 -a 选项,它会自动把
说明 支付宝报关接口 官方文档:https://docs.open.alipay.com/155/104778/ 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\Customs\Submit\Request 属性 名称 类型 说明 $service string 接口名称 $out_request_no string 商户生成的用于唯一标识一次报关操
说明 微信支付-订单附加信息提交接口SDK。 官方文档:https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_1 类 请求参数类 请求参数 类名:\Yurun\PaySDK\Weixin\CustomDeclareOrder\Request 属性 名称 类型 说明 $_apiMethod strin
在cherry-pick,您可以从其他分支复制指定的提交,然后导入到现在的分支。 主要使用的场合: 把弄错分支的提交移动到正确的地方 把其他分支的提交添加到现在的分支