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


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

    by:授客 QQ1033553122

    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>

     

  • 相关阅读:
    打印机故障之乌龙事件
    为什么 FastAdmin 的插件不全部免费?
    PADS Logic 脚本的 Fields 一个对象记录
    时间模块和random模块

    模块的导入和使用
    递归函数与二分查找算法
    递归函数
    匿名函数
    内置函数
  • 原文地址:https://www.cnblogs.com/shouke/p/13170557.html
Copyright © 2020-2023  润新知