计算属性'name'已分配,但它没有setter(没有v-model)

Ott*_*tto 1 vue.js vue-component vuex vuejs2

我正在尝试通过添加类来单击它时使导航处于活动状态nav-selected.我已经看到过这样的其他问题,但它们是相关的,v-model因此它们没有帮助我.

我需要确保将它添加到商店中,以便即使刷新后我也能始终看到哪个页面处于活动状态.但是我收到以下错误:

错误

Navigation.vue:

    <template>
    <v-container>
        <v-layout align-center>
            <!-- Logo -->
            <v-flex sm2>
                <img src="http://beam.space/img/icon.png" height="30px">
            </v-flex>
            <!-- Navigation -->
            <v-flex sm8>
                <v-layout wrap justify-center>
                    <v-flex sm2>
                        <router-link to="/myspaces">
                            <h2 @click="setActiveNav(0)" :class="{'nav-selected': activeNavigation === 0}" class="nav-text">My Spaces</h2>
                        </router-link>

                    </v-flex>

                    <v-flex sm2>
                        <router-link to="/inspirations">
                            <h2 @click="setActiveNav(1)" :class="{'nav-selected': activeNavigation === 1}" class="nav-text">Inspirations</h2>
                        </router-link>
                    </v-flex>
                </v-layout>
            </v-flex>
            <v-flex sm2>
                <p>profile</p>
            </v-flex>
        </v-layout>
    </v-container>
</template>

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

    export default {
        name: "navigation",
        computed: {
            ...mapState([
                'activeNavigation'
            ])
        },
        methods: {
            setActiveNav(activeNav) {
                this.activeNavigation = activeNav;
                this.store.commit('setActiveNavigation', this.activeNavigation);
            }
        }
    }
</script>

<style scoped>

</style>
Run Code Online (Sandbox Code Playgroud)

Store.js:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

export default new Vuex.Store({
    state: {
        activeNavigation: 0
    },
getters: {

    },
    mutations: {
        // Set Active navigation on click.
        setActiveNavigation(state, id) {
            state.activeNavigation = id;
        }

    },

    // actions zijn a sync
    actions: {
    }
});
Run Code Online (Sandbox Code Playgroud)

Dec*_*oon 5

mapState仅创建getter属性.您无法分配这些属性.

activeNavigation无论如何都不需要分配,提交将activeNavigation自动更新映射值.

改变这个:

setActiveNav(activeNav) {
    this.activeNavigation = activeNav;  // <-- Not allowed
    this.store.commit('setActiveNavigation', this.activeNavigation);
}
Run Code Online (Sandbox Code Playgroud)

对此:

setActiveNav(activeNav) {
    this.$store.commit('setActiveNavigation', activeNav);
}
Run Code Online (Sandbox Code Playgroud)