Vuex - Computed 属性 "name" 已分配给但它没有 setter
Vuex - Computed property "name" was assigned to but it has no setter
我有一个带有一些表单验证的组件。这是一个多步骤结帐表格。下面的代码是第一步。我想验证用户是否输入了一些文本,将他们的名字存储在全局状态中,然后发送到下一步。我正在使用 vee-validate 和 vuex
<template>
<div>
<div class='field'>
<label class='label' for='name'>Name</label>
<div class="control has-icons-right">
<input name="name" v-model="name" v-validate="'required|alpha'" :class="{'input': true, 'is-danger': errors.has('name') }" type="text" placeholder="First and Last">
<span class="icon is-small is-right" v-if="errors.has('name')">
<i class="fa fa-warning"></i>
</span>
</div>
<p class="help is-danger" v-show="errors.has('name')">{{ errors.first('name') }}</p>
</div>
<div class="field pull-right">
<button class="button is-medium is-primary" type="submit" @click.prevent="nextStep">Next Step</button>
</div>
</div>
</template>
<script>
export default {
methods: {
nextStep(){
var self = this;
// from baianat/vee-validate
this.$validator.validateAll().then((result) => {
if (result) {
this.$store.dispatch('addContactInfoForOrder', self);
this.$store.dispatch('goToNextStep');
return;
}
});
}
},
computed: {
name: function(){
return this.$store.state.name;
}
}
}
</script>
我有一个用于处理订单状态和记录名称的商店。最后,我想将多步表单中的所有信息发送到服务器。
export default {
state: {
name: '',
},
mutations: {
UPDATE_ORDER_CONTACT(state, payload){
state.name = payload.name;
}
},
actions: {
addContactInfoForOrder({commit}, payload) {
commit('UPDATE_ORDER_CONTACT', payload);
}
}
}
当我 运行 这段代码时,我得到一个错误 Computed property "name" was assigned to but it has no setter.
如何将名称字段的值绑定到全局状态?我希望这是持久的,这样即使用户返回一步(点击 "Next Step" 后),他们也会看到他们在这一步输入的名字
如果您要 v-model
计算,则需要 setter。无论您希望它如何处理更新后的值(可能将其写入 $store
,考虑到这是您的 getter 从中提取的内容),您都可以在 setter.
中执行
如果通过表单提交将其写回商店,您不想v-model
,您只想设置:value
。
如果你想要一个中间状态,它保存在某个地方但在提交表单之前不会覆盖 $store
中的源,你需要创建这样一个数据项。
对我来说,它正在改变。
this.name = response.data;
这么算出来的returns;
this.$store.state.name = response.data;
应该是这样的
在您的组件中
computed: {
...mapGetters({
nameFromStore: 'name'
}),
name: {
get(){
return this.nameFromStore
},
set(newName){
return newName
}
}
}
在您的商店
export const store = new Vuex.Store({
state:{
name : "Whosebug"
},
getters: {
name: (state) => {
return state.name;
}
}
}
我遇到了完全相同的错误
Computed property "callRingtatus" was assigned to but it has no setter
这里是根据我的场景的示例代码
computed: {
callRingtatus(){
return this.$store.getters['chat/callState']===2
}
}
我把上面的代码改成下面的方式
computed: {
callRingtatus(){
return this.$store.state.chat.callState===2
}
}
fetch values from vuex store state instead of getters inside the computed hook
我在通过 ...mapState(['sampleVariable'])
从 store
中获取值时遇到了这样的错误。然后我在<script>
中使用了this.sampleVariable
,在<template>
中使用了sampleVariable
。
解决问题的方法是 return
data()
中的这个,将其分配给一个单独的变量,然后在 component
中重复使用新创建的变量,如下所示:
data() {
return {
newVariable: this.$store.state.sampleVariable,
}
}
然后,我将组件中的引用从 sampleVariable
更改为 newVariable
,错误消失了。
我有一个带有一些表单验证的组件。这是一个多步骤结帐表格。下面的代码是第一步。我想验证用户是否输入了一些文本,将他们的名字存储在全局状态中,然后发送到下一步。我正在使用 vee-validate 和 vuex
<template>
<div>
<div class='field'>
<label class='label' for='name'>Name</label>
<div class="control has-icons-right">
<input name="name" v-model="name" v-validate="'required|alpha'" :class="{'input': true, 'is-danger': errors.has('name') }" type="text" placeholder="First and Last">
<span class="icon is-small is-right" v-if="errors.has('name')">
<i class="fa fa-warning"></i>
</span>
</div>
<p class="help is-danger" v-show="errors.has('name')">{{ errors.first('name') }}</p>
</div>
<div class="field pull-right">
<button class="button is-medium is-primary" type="submit" @click.prevent="nextStep">Next Step</button>
</div>
</div>
</template>
<script>
export default {
methods: {
nextStep(){
var self = this;
// from baianat/vee-validate
this.$validator.validateAll().then((result) => {
if (result) {
this.$store.dispatch('addContactInfoForOrder', self);
this.$store.dispatch('goToNextStep');
return;
}
});
}
},
computed: {
name: function(){
return this.$store.state.name;
}
}
}
</script>
我有一个用于处理订单状态和记录名称的商店。最后,我想将多步表单中的所有信息发送到服务器。
export default {
state: {
name: '',
},
mutations: {
UPDATE_ORDER_CONTACT(state, payload){
state.name = payload.name;
}
},
actions: {
addContactInfoForOrder({commit}, payload) {
commit('UPDATE_ORDER_CONTACT', payload);
}
}
}
当我 运行 这段代码时,我得到一个错误 Computed property "name" was assigned to but it has no setter.
如何将名称字段的值绑定到全局状态?我希望这是持久的,这样即使用户返回一步(点击 "Next Step" 后),他们也会看到他们在这一步输入的名字
如果您要 v-model
计算,则需要 setter。无论您希望它如何处理更新后的值(可能将其写入 $store
,考虑到这是您的 getter 从中提取的内容),您都可以在 setter.
如果通过表单提交将其写回商店,您不想v-model
,您只想设置:value
。
如果你想要一个中间状态,它保存在某个地方但在提交表单之前不会覆盖 $store
中的源,你需要创建这样一个数据项。
对我来说,它正在改变。
this.name = response.data;
这么算出来的returns;
this.$store.state.name = response.data;
应该是这样的
在您的组件中
computed: {
...mapGetters({
nameFromStore: 'name'
}),
name: {
get(){
return this.nameFromStore
},
set(newName){
return newName
}
}
}
在您的商店
export const store = new Vuex.Store({
state:{
name : "Whosebug"
},
getters: {
name: (state) => {
return state.name;
}
}
}
我遇到了完全相同的错误
Computed property "callRingtatus" was assigned to but it has no setter
这里是根据我的场景的示例代码
computed: {
callRingtatus(){
return this.$store.getters['chat/callState']===2
}
}
我把上面的代码改成下面的方式
computed: {
callRingtatus(){
return this.$store.state.chat.callState===2
}
}
fetch values from vuex store state instead of getters inside the computed hook
我在通过 ...mapState(['sampleVariable'])
从 store
中获取值时遇到了这样的错误。然后我在<script>
中使用了this.sampleVariable
,在<template>
中使用了sampleVariable
。
解决问题的方法是 return
data()
中的这个,将其分配给一个单独的变量,然后在 component
中重复使用新创建的变量,如下所示:
data() {
return {
newVariable: this.$store.state.sampleVariable,
}
}
然后,我将组件中的引用从 sampleVariable
更改为 newVariable
,错误消失了。