在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ vuex刷新后數(shù)據(jù)保存丟失的問題

vuex刷新后數(shù)據(jù)保存丟失的問題

vue項目,刷新后store中的數(shù)據(jù)丟了,我用localstorage存儲,在拿出來,發(fā)現(xiàn)頁面會報錯,不知道什么原因。
代碼:

login:

methods: {
    ...mapMutations([
      'SET_USER',
    ]),
    Login(){
      Login(this.credentials.email,this.credentials.password)
      .then(res => {
        console.log(res.data,'請求成功')
        var data = res.data;
        if(data.error == ""){
          this.SET_USER(data.data);
          console.log(data.data);
          this.$router.go(-1);
        }
      })
    }
}

actions:

login(context, user) {
    context.commit(SET_USER, user);
},
getUser(context, user) {
    var data = {
        id: getStore('user_id'),//從localStorage中拿數(shù)據(jù)
        username: getStore('user_name'),
        session_id: getStore('session_id'),
    }
    context.commit(GET_USER, data)
}

mutations:

[SET_USER](state, user) {
    state.user = user;
    setStore('user_id', user.id);
    setStore('user_name', user.username);
    setStore('session_id', user.session_id);
},

[GET_USER](state, user) {
    state.user = user;
}

header組件:

    <template v-if="user">
      <router-link to="/login" :exact="true">登錄&nbsp;&nbsp;</router-link>
      <router-link to="/signin" :exact="true">注冊&nbsp;&nbsp;</router-link>
    </template>
    <template v-else>
      <b-nav-item-dropdown :right="!isRTL" class="demo-navbar-user">
        <template slot="button-content">
          <span class="d-inline-flex flex-lg-row-reverse align-items-center align-middle">
            <span class="px-1 mr-lg-2 ml-2 ml-lg-0">{{ user.username }}</span>
          </span>
        </template>
        <b-dd-item><i class="ion ion-ios-person text-lightest"></i> &nbsp; 個人中心</b-dd-item>
        <b-dd-divider />
        <b-dd-item><i class="ion ion-ios-log-out text-danger"></i> &nbsp; 退出登錄</b-dd-item>
      </b-nav-item-dropdown>
    </template>
    
    
    script里邊:
    mounted(){
        this.getUser()
      },
      methods: {
        ...mapActions([
          'getUser'
        ]),
        toggleSidenav () {
          this.layoutHelpers.toggleCollapsed()
        },
    
        getLayoutNavbarBg () {
          return this.layoutNavbarBg
        }
      },
      computed: {
        ...mapState([
          'user'
        ])
      },
      
      

getStore和setStore:

/**
     * 存儲localStorage
     */
    export const setStore = (name, content) => {
        if (!name) return;
        if (typeof content !== 'string') {
            content = JSON.stringify(content);
        }
        window.localStorage.setItem(name, content);
    }
    
    /**
     * 獲取localStorage
     */
    export const getStore = name => {
        if (!name) return;
        return window.localStorage.getItem(name);
    }
    
    /**
     * 刪除localStorage
     */
    export const removeStore = name => {
        if (!name) return;
        window.localStorage.removeItem(name);
    }

這樣下來頁面就會拋異常

clipboard.png

是我哪塊寫法不對么,vue-devtools中的state是有數(shù)據(jù)的
圖片描述

回答
編輯回答
心癌

關(guān)鍵代碼你沒貼, setStore和 getStore

2017年3月1日 13:11
編輯回答
枕頭人
mounted(){
    this.getUser()
},
換成
created(){
    this.getUser()
},

沒有看到你store的初始值 我猜是上面那個原因 一開始store.user為undefined

2017年8月18日 13:15