Computed property "route" was assigned to but it has no setter

发布于 2022-09-11 18:14:23 字数 189 浏览 16 评论 0

computed: {
  route () {
    return this.$store.state.curTab.route
  }
}

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(22

煮茶煮酒煮时光 2022-09-18 18:14:25

悲剧了,我也是删除了重新npm install 结果也是这样,但是我没有赋值啊,我只是单纯的读取然后渲染,求解决

栖迟 2022-09-18 18:14:25

clipboard.png
尝试改变数据交互方式 ,比如:v-model 替换成 v-bind.

遥远的她 2022-09-18 18:14:25

我来回答一下关于element-UI的吧,最近写项目,用的就是这个框架,也是到了el-tab组件报这个错。最后的解决方法是这样的:

<el-tabs :value="tabIndex" type="card" closable @tab-remove="removeTab" @tab-click="setTabIndex"></el-tabs>

把v-model双向绑定给改成动态绑定value值,完美解决。。。以上的各位大佬写的是通用的适用方法

寄居人 2022-09-18 18:14:25

在data中存一次然后再调用也是ok的

猥︴琐丶欲为 2022-09-18 18:14:25

element没有随vue2.0更新代码,如果在计算属性里写...mapState([''])这种形式,会被提醒计算属性被分配到但它没有设置器,解决方案两种,第一种,设置这个set方法:
computed:{

isAllChecked:{
  get: function () {
    return this.$store.state.isAllChecked;
  },
  set: function (newValue) {
    this.$store.state.isAllChecked = newValue;
  }
}

}
第二种,在data里重新赋值给一个新变量:
data () {

return {
  isAllChecked:this.$store.state.isAllChecked
}

}
这样问题就解决了。

东走西顾 2022-09-18 18:14:24

就这点代码让我们猜?

世俗缘 2022-09-18 18:14:24

如果对计算属性做赋值操作,则要求计算属性提供 setter 函数…否则会报 warning

筑梦 2022-09-18 18:14:24

用vuex的出现这个问题的话 , 可以这样解决:

<v-loading v-model="isLoading.isLoading" loading=false class="loading"></v-loading>
computed: {
  ...mapState({
    isLoading: state => state.VuxLoading
  }),
}
青衫负雪 2022-09-18 18:14:24

可以用mounted代替嘛

打小就很酷 2022-09-18 18:14:24

我也出现了这样的问题,可能是你在method中也写了一个route()的方法。反正我是这样的

玩套路吗 2022-09-18 18:14:24

出现这个错误是因为你在什么地方给 route 赋值了,看看其他地方的代码

茶花眉 2022-09-18 18:14:24

一个计算属性,如果没有设置 setter,也就是传入的是一个函数,或者传入的对象里没有 set 属性,当你尝试直接该改变这个这个计算属性的值,都会报这个错误。

源码:

文件目录 src/core/instance/state.js

图片描述

你如我软肋 2022-09-18 18:14:24

今天我也遇到同个问题,上网查的结果是
这种问题一般是这个计算属性没有设置set方法导致该报错,因为在methods方法里面有对这个计算属性赋值的操作。只要添加一个 set方法就可以解决此报错
能不能解决你的问题我就不确定了

computed: {
  route () {
    get: function () {
      return this.$store.state.curTab.route
    },
    set: function (newValue) {
      this.$store.state.curTab.route = newValue
    }
  }
}
苏别ゝ 2022-09-18 18:14:24

再结合vuex和表单v-model中,直接利用mapState就会提示没有setter
我是这样解决的:

computed: {
            time:{

                    // getter
                    get: function () {
                        return this.$store.state.time;
                    },
                    // setter
                    set: function (newValue) {
                        this.$store.state.time = newValue;
                    }
                },

暂时没发现更好的解决办法
有更好的请提供一下

初见 2022-09-18 18:14:24

我刚好也遇到了这个问题,楼上说的是对的。
vue最近更新了版本,要求必须在计算属性里加上setter,否则报错。
在github上看到最近的更改记录:vue/src/core/instance

clipboard.png

浅唱々樱花落 2022-09-18 18:14:24

v-model 与 vuex 的设定问题,v-model 用来做双向绑定,单 vuex 提供的 mapGetters只能设置一个getter,没有setter。 在strict 模式下,会报错,如果业务上有双向,可以忽略

挽心 2022-09-18 18:14:24

不是vuex版本的问题,也不是

computed: {
  route () {
    return this.$store.state.curTab.route
  }
}

这段代码的问题,而是你代码中的其他地方对这个route进行了赋值导致的这个错误
图片描述

看我的demo示例,红框处的代码导致了Computed property "json" was assigned to but it has no setter。这是我之前没用vuex时遗留的代码,导致了这个错误。去掉就OK了。

附上我的store

export default new Vuex.Store({
    state: {
        data: {}
    },
    getters: {
        getJson: state => state.data
    },
    mutations: {
        change (state, data) {
            // 变更状态
            state.data = data;
        }
    }
});
相思碎 2022-09-18 18:14:24

我在使用绑定的时候,直接赋值也是会出现问题。
computed: {

        areaTreeCode:function () {
            return this.areaValue;
        },
    },

赋值: this.areaTreeCode=data.code;会提示no setter ,no setter是由直接赋值导致的。
也试过添加get set方法依旧不行,
于是转念一想,我改areaValue岂不是可以。
赋值:this.areaValue=data.code;就可以解决了,既能赋值,又不会提示no setter。
啊。。。本仙女果然机智非凡。。。。

嘿嘿嘿 2022-09-18 18:14:24

我用mapGetters拿到的数据也有这个问题。。。不知道怎么解决

生生漫 2022-09-18 18:14:24

我也遇到这个问题了,解决方法:真的是因为这个被其他地方给赋值了。
我找了一遍发现,我的action和store是同一个名称,所以才导致他在其他地方被赋值,所以action和store不要用统一命名,action前面加个getXXX,也很通俗易懂。

clipboard.png

个人感觉用set返回是一个heck的方法,建议查看自己代码,是否都是重名了。

魂牵梦绕锁你心扉 2022-09-18 18:14:23

我出现上面这个错误的原因是我使用了element-UI里的el-tab组件,http://element-cn.eleme.io/1....

template:
<el-tabs type="card" v-model="route">
</el-tabs>
js:
computed: {
  route () {
    return this.$store.state.curTab.route
  }
}

提问之后,很多人说是因为在代码中改了route的值,但我并没有改,后来才发现,我虽然在代码里没有改route的值,但是在页面上切换tab的时候,element-UI会去改route的值,一开始是没有问题的,直到有一次更新了vue的版本,然后就开始出现上面的错误。
总而言之:element-UI改了route + vue版本更新 导致了这个错误的产生

改正:

js:
computed: {
  route: {
    get: function () {
      return this.$store.state.curTab.route
    },
    set: function () {
    }
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文