【问题标题】:Computed property was assigned to but it has no setter已分配计算属性,但它没有设置器
【发布时间】:2019-05-21 09:00:39
【问题描述】:

使 myVal 工作的正确语法/钩子是什么?

我的代码如下所示:

<v-item-group v-model="myVal" ...

import { mapActions, mapGetters } from 'vuex'; 
export default {
  computed : {
     ...mapActions({
       myVal: 'myModulePath/setMyVal'
     }),
     ...mapGetters({
       myVal: 'myModulePath/getMyVal'
     }),
  },
}

商店的样子:

actions: {
  setMyVal({commit}, value){commit('someMutation',value);}
getters: {
  getMyVal: state => { return state.myVal;}

我不确定如何连接它,以便“设置器”工作并且错误消息消失。

我也试过了,没用:

...mapState('myModulePath', ['myVal']) 

【问题讨论】:

    标签: vue.js vuex


    【解决方案1】:

    您需要定义一个computed with a get and a set function。也许:

    export default {
      computed : {
         myVal: {
            get() { return this.$store.getters.getMyVal; },
            set(newValue) { this.$store.dispatch('setMyVal', newValue); }
         }
      },
    }
    

    【讨论】:

    • 谢谢!两个答案都是正确的,对我有用(虽然只能投票给 1)
    • 刚才真的帮到我了!非常感谢您的解释!
    【解决方案2】:

    你需要告诉 vue 组件当计算属性被赋予一个新值时要做什么

    computed: {
         myVal: {
            get: () => this.$state.store.getters.myModulePath.getMyVal,
            set: (value) => this.$state.commit('someMutation', value )
        }
      }
    

    请注意,我使用的是 setter 而不是 action。在计算属性设置器中使用操作是个坏主意,因为操作通常是异步的,并且可能会导致稍后尝试调试计算属性时头疼。

    【讨论】:

    • 谢谢!两个答案都是正确的,对我有用(虽然只能投票给 1)
    • 我试过这个模式,但是设​​置值时出现这个错误:ypeError: _this is undefined (this.$state..)
    • @user5329403 你使用的是function() {} 符号还是箭头函数() =&gt; {}
    • 我会使用箭头函数
    猜你喜欢
    • 2020-10-04
    • 2018-09-26
    • 2020-11-07
    • 2020-10-23
    • 2018-02-16
    • 2019-08-01
    • 2018-11-02
    • 2020-07-09
    • 2021-03-17
    相关资源
    最近更新 更多