如何在 vue js 中访问存储值到组件

cod*_*der 4 vue.js vue-router vuejs2

这是我的 store.js

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

Vue.use(Vuex)

export default new Vuex.Store({
    state: {
        isLoggedIn: !!localStorage.getItem('token'),
        isLog : !!localStorage.getItem('situation')
    },
    mutations: {
        loginUser (state) {
            state.isLoggedIn = true
            state.isLog = true
        },
        logoutUser (state) {
            state.isLoggedIn = false
            state.isLog = false
        },
    }
})
Run Code Online (Sandbox Code Playgroud)

但是当我在 display.vue 中调用 {{state.isLoggedIn}} 时,我没有得到值。

在 display.vue 中,我使用

<script>
import axios from "axios";
import store from '../store';

export default {
  name: "BookList",
  data() {
    return {
      students: [],
      errors: [],
      state: this.state.isLoggedIn,

    };
  },
})
</script>

<template>
{{this.state}}
</template>
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时我遇到了错误。请任何人都可以请帮助是什么问题。

Rod*_*rte 12

您不需要将您的商店导入到您的组件中。相反,您应该使用this.$store.

为了访问 store 状态,更好(也是推荐)的方法是在你的组件中映射状态

在您的示例中,它应该是这样的:

import { mapState } from 'vuex'

export default {
    ...
    computed: {
        ...mapState({
            isLoggedIn: 'isLoggedIn'
        })
     }
}
Run Code Online (Sandbox Code Playgroud)

在您的模板中,this不需要。只需按名称调用该属性:

{{ isLoggedIn }}
Run Code Online (Sandbox Code Playgroud)

  • @Jared 不,您需要将其[提交](https://vuex.vuejs.org/guide/mutations.html)到商店。您可以使用 `$store.commit('your-mutation', Payload)` 或调度一个改变状态的 [action](https://vuex.vuejs.org/guide/actions.html)。 (2认同)