irpas技术客

Vue computed 报错:Computed property ‘ ‘ was assigned to but it has no setter 错误原因分

网络 3207

错误描述

最近在封装Vue模块时,借助Vue的Computed属性监听传递的数据,但是开发调试过程中控制台取提示Computed property was assigned to but it has no setter?错误。控制台报错如下:

?错误分析

根据控制台错误提示,组件中定义的computed属性缺少setter,使用过computed?都应该知道,该错误提示通常发生在组件内为computed属性赋值的时候,如果没有显示的声明setter,控制台则会打印如上错误。那么顺着这个方向,继续排查错误

以下是我的代码user.js

export default { // 开启命名空间 namespaced: true, // state保存的数据 state: () => ({ // 存储的地址 address: JSON.parse(uni.getStorageSync('address') || '{}') }), mutations: { //更新收货地址 updateAddress(state, address) { state.address = address // 通过 this.commit() 方法,调用 m_user 模块下的 saveAddressToStorage 方法将 address 对象持久化存储到本地 this.commit('m_user/saveAddressToStorage') }, // 定义将 address 持久化存储到本地 mutations 方法 saveAddressToStorage(state) { uni.setStorageSync('address', JSON.stringify(state.address)) } }, // 数据包装器 getters: { // 拼接地址 addstr(state) { if (!state.address.provinceName) { return '' } else { return state.address.provinceName + state.address.cityName + state.address.countyName + state.detailInfo } }, }, }

发先我在user.js中对address进行了重新赋值

解决办法一

在要使用该模块数据的组件computed里添加此代码

address: { get() { return this.address; }, set() {} }

这种方法虽然解决了目前的问题,但是会出现一个新问题,如下

?目前不知道解决办法,有知道的小伙伴可以给我留言

解决办法二

将组件计算属性里的代码注释掉(下下策)

computed: { // ...mapState('m_user', ['address']), ...mapGetters('m_user', ['addstr']), }


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Vue #computed #报错Computed #property #was #assigned