Vuex突变和操作不起作用

时间:2018-06-21 13:03:06

标签: vue.js vuejs2 vue-component vuex

我是Vue和Vuex的新手,我想弄清楚如何对商店中的数据进行变异。

当前在我的州,默认用户名是“ default”,我想将其更改为“ otto”,以后我将无法从数据库中获取此信息。但是出于理解的目的,我只是想让它起作用。

此时,组件已正确加载,并显示“默认”。没有错误。

store.js:

// store.js 
export default {
    state: {
        username: 'default'
    },
    getters: {
    },
    mutations: {
        changeUsername (state) {
            state.username = 'otto'
        }
    },
    actions: {
        changeUsername (context) {
            context.commit('changeUsername')
        }
    }
}

vue文件:

// Basic.vue
<template>
    <div>
        <p>{{ username }}</p>

    </div>
</template>

<script>
    import { mapState } from 'vuex';
    import { mapMutations } from 'vuex';
    import { mapActions } from 'vuex';


    export default {
        name: "basic",

        computed: {
            ...mapState([
                'username'
            ])
        },
        methods: {
            ...mapMutations([
                'changeUsername'
            ]),
            ...mapActions([
                'changeUsername'
            ])
        }
    }
</script>

2 个答案:

答案 0 :(得分:0)

<template>
    <div>
        <p @click="changeUsername">{{ username }}</p>

    </div>
</template>

如果用户点击这样的p标签,则可以更改用户名。

答案 1 :(得分:0)

不包括您的突变,因为您的操作会调用它。并在按钮点击上调用操作,例如:

商店:

// store.js 
export default {
    state: {
        username: 'default'
    },
    getters: {
        username: state => state.username
    },
    mutations: {
        setUsername (state) {
            state.username = 'otto'
        }
    },
    actions: {
        updateUsername (context) {
            context.commit('setUsername ')
        }
    }
}

组件:

// Basic.vue
<template>
    <div>
        <p>{{ username }}</p>
        <button @click="updateUsername">Change!</button>
    </div>
</template>

<script>
    export default {
        name: "basic",

        computed: {
            username() {
                return this.$store.getters.username
            }
        },
        methods: {
            updateUsername() {
                this.$store.dispatch('updateUsername')
            }
        }
    }
</script>

其他建议:在命名您的变异和动作时要小心。您不希望它们使用相同的名称以避免不必要的行为。通常,我会根据请求的内容来命名我的突变setXXXX和动作getXXXpatchXXX

Working jsfiddle