zoukankan      html  css  js  c++  java
  • 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>

     

  • 相关阅读:
    【数据结构】Trie(字典树、前缀树)
    【数据结构】优先队列
    【数据结构】堆
    【数据结构】二分搜索树
    【数据结构】哈希表
    【数据结构】链表
    【数据结构】队列
    Python项目案例开发从入门到实战
    Matlab
    Matlab
  • 原文地址:https://www.cnblogs.com/shouke/p/13170557.html
Copyright © 2011-2022 走看看