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>

     

  • 相关阅读:
    Iconfont——实现字体图标的反转
    HTTPS——https下的静态资源中如何使用http的地址
    TP5.x——initialize()中如何return
    vscode——tab转空格
    Chocolatey——windows下的包管理器
    head里两个重要标签base和meta
    js原生触发事件
    路径分隔符不一致,导致windows下不能开发
    HTML词法和语法
    chrome headless 无头浏览器 应用
  • 原文地址:https://www.cnblogs.com/shouke/p/13170557.html
Copyright © 2011-2022 走看看