Vue 给mapState中定义的属性赋值报错的解决方案

简介: Vue 给mapState中定义的属性赋值报错的解决方案

Vue mapState中定义的属性赋值报错的解决方案


1.   实践环境

Vue 2.9.6

 

2.   问题描述

<script>

import { mapState } from 'vuex';

 

export default {

   name: "displayCount",

   computed: {

       ...mapState({

           ...略

           count: state => state.a.count

       })

 

   },

 

   methods: {

       increaseCount () {

           this.count = this.count + 1

       }

   }

};

</script>

 

<style>

</style>

 

如上,我们希望在执行increaseCount函数时,给mapstate函数中映射定义的this.count赋值,给该值增加1,结果,提示

[Vue warn]: Computed property "count" was assigned to but it has no setter.

 

3.   解决方案1

如下,把属性“移出mapState”,然后为属性新增get,set方法,分别用于获取值和改变值(按store状态管理规定的方式)

 

<script>

import { mapState } from 'vuex';

 

export default {

   name: "displayCount",

 

   computed: {

       ...mapState({

...略

         

       }),

       count: {

           get() {

               return this.$store.state.a.count;

           },

           set(val) {

               this.$store.commit("increaseCount", val);

           }

       }

 

   },

 

   methods: {

       increaseCount () {

           this.count = this.count + 1

       }

   }

};

</script>

 

注意:this.$store.commit("increaseCount", val);中的increaseCount方法名称,并不是methods中定义的方法名称,而是store中定义的方法

 

4.   解决方案2

通过对比当前属性值和store状态值,然后根据比较结果,决定是否根据store状态管理规则更新状态值。

<script>

import { mapState } from 'vuex';

 

export default {

   name: "displayCount",

 

   computed: {

       ...mapState({

           count: state => state.a.count

       })

 

   },

 

   methods: {

       increaseCount () {

           if (this.count == this.$store.state.a.count) {

               this.$store.commit("increaseCount", this.count+1);

           }

       }

   }

};

</script>

目录
相关文章
|
14天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
82 1
|
25天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
8月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
85 3
|
8月前
|
人工智能 JavaScript 前端开发
毕设项目-基于Springboot和Vue实现蛋糕商城系统(三)
毕设项目-基于Springboot和Vue实现蛋糕商城系统
|
8月前
|
JavaScript Java 关系型数据库
毕设项目-基于Springboot和Vue实现蛋糕商城系统(一)
毕设项目-基于Springboot和Vue实现蛋糕商城系统
209 0
|
8月前
|
JavaScript 前端开发 API
Vue3+Vite+TypeScript常用项目模块详解
现在无论gitee还是github,越来越多的前端开源项目采用Vue3+Vite+TypeScript+Pinia+Elementplus+axios+Sass(css预编译语言等),其中还有各种项目配置比如eslint 校验代码工具配置等等,而我们想要进行前端项目的二次开发,就必须了解会使用这些东西,所以作者写了这篇文章进行简单的介绍。
163 0
Vue3+Vite+TypeScript常用项目模块详解
|
8月前
|
设计模式 JavaScript
探索 Vue Mixin 的世界:如何轻松复用代码并提高项目性能(上)
探索 Vue Mixin 的世界:如何轻松复用代码并提高项目性能(上)
探索 Vue Mixin 的世界:如何轻松复用代码并提高项目性能(上)
|
8月前
|
前端开发 JavaScript Java
毕业设计|基于SpringBoot+Vue的科研课题项目管理系统
毕业设计|基于SpringBoot+Vue的科研课题项目管理系统
215 1