欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Vuex管理登錄狀態(tài)

 更新時間:2017年11月13日 09:35:46   作者:思吾謂何思  
這篇文章主要介紹了詳解Vuex管理登錄狀態(tài),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

又仔細(xì)看了一遍vuex的文檔,還是云里霧里的,不過至少明白它是一個專門管理狀態(tài)的,根據(jù)數(shù)據(jù)狀態(tài)的改變可以驅(qū)動視圖更新,既然是這樣那至少登錄注冊是一種狀態(tài),就用登錄來做測試,學(xué)習(xí)vuex,不過話說回來,既然專門管理狀態(tài),那我至少要仔細(xì)推敲一下這個learn的學(xué)習(xí)項目有那些狀態(tài)邏輯。

1、據(jù)說儲存的vuex store里面的狀態(tài)是臨時的,右鍵刷新一下頁面這些狀態(tài)就銷毀了(這是據(jù)說,請大神解惑我也沒辦法證實),如果是這樣的話,我的用戶狀態(tài)user還是應(yīng)該要寫入sessionStorage,不然登錄了的一刷新頁面就變成沒登錄了,用戶不就瘋了啊。所以store里面的user狀態(tài)應(yīng)該要從sessionStorage里面去讀。

2、在這個learn項目中現(xiàn)存的頁面中,home,paroducts,FAQ,login,regin,應(yīng)該是不需要登錄就可以訪問,而manger和manger以下的子頁面是必須要登錄才可以訪問的。

3、比較特殊的是login和regin,如果用戶已經(jīng)登錄了,再去訪問這2個頁面,原則上來說也是可以的,但如果已經(jīng)登錄了,再用其它賬號來登錄一次,那sessionStorage存在2個user數(shù)據(jù),那就顯然不合理了,所以應(yīng)該規(guī)定,如果用戶已經(jīng)登錄,又去訪問login或者regin,那我們應(yīng)先remove掉sessionStorage里面user數(shù)據(jù)

4、vuex規(guī)定所有狀態(tài)的改變只能依靠mutation,而要驅(qū)動mutation去改變狀態(tài)的只能是action。那在這個項目里登錄狀態(tài)變化只會有登錄、注冊和登出這三種情況,登錄和注冊成功的時候要去執(zhí)行一個存在user的action,登出的時候去執(zhí)行一個不存在user的action。

5、vuex官方還提了一個getter的玩意兒,我感覺應(yīng)該是在我們需要取用store里面狀態(tài)的時候,確切的說應(yīng)該是取出這個狀態(tài)之后,給這個狀態(tài)做一些加工改變用的,而且應(yīng)該只能getter一次吧,多了感覺要亂套啊(不知道這個想法對不對),但看見這樣的寫法this.$store.getters.doneTodosCount,感覺應(yīng)該可以用不止一次把。估計我想得有點多了,目前看起來也用不上,也許要經(jīng)歷過需要的應(yīng)用場景才能理解透徹把。

6、還有個module,這個就有點迷了,沒太搞懂,先不管了

預(yù)想中store的登錄狀態(tài)還是要從sessionStorage來取的,所以我先把路由約束好,那些頁面需要user,那些不需要,訪問那些頁面需要remove user

打開main.js

添加代碼

// 這個官方名字叫導(dǎo)航守衛(wèi),挺形象的
router.beforeEach((to, from, next) => {
 // 如果是去登錄或注冊,那就先把user移除
 if (to.path === '/login' || to.path === '/regin') {
  sessionStorage.removeItem('user')
 }
 let user = JSON.parse(sessionStorage.getItem('user'))
 if (!user && (to.path === '/manger/my' || to.path === '/manger/send' || to.path === '/manger/history')) {
  next({ path: '/login' })
 } else {
  next()
 }
})

這樣寫感覺怪怪的,不知道有沒有簡單點的寫法?

不過想要的效果是能達(dá)到的

然后嘗試寫store

先寫個基本結(jié)構(gòu)


然后一步一步具體寫

是說這需要一個function?

唉喲,不對,我蠢了,這是賦值(不知道說賦值準(zhǔn)不準(zhǔn)確)嘛,又不是寫一個obj對象,不需要逗號的哈

store.js

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

Vue.use(Vuex)
// 創(chuàng)建基本狀態(tài)
const state = {
 // 登錄狀態(tài)為沒登錄
 logined: false,
 // 用戶信息數(shù)據(jù),目前只需要avatar和name,還是把username也加上吧
 LoginedUser: {
  name: '',
  avatar: '',
  username: ''
 }
}
// 創(chuàng)建改變狀態(tài)的方法
const mutations = {
 // 改變狀態(tài)的方法也需要2個,一個是登錄或注冊了,一個是登出了
 // 這里不能寫箭頭函數(shù)???
 // 登錄
 LOGIN (state) {
  // 先讓登錄狀態(tài)變?yōu)榈卿浟?
  state.logined = true
  // 然后去sessionStorage取用戶數(shù)據(jù)
  let user = JSON.parse(sessionStorage.getItem('user'))
  // 再把用戶數(shù)據(jù)發(fā)下去
  state.LoginedUser.name = user.name
  state.LoginedUser.avatar = user.avatar
  state.LoginedUser.username = user.username
 },
 // 登出
 LOGOUT (state) {
  // 這個同理
  state.logined = false
  state.LoginedUser.name = ''
  state.LoginedUser.avatar = ''
  state.LoginedUser.username = ''
 }
}
// 創(chuàng)建驅(qū)動actions可以使得mutations得以啟動
const actions = {
 // 這里先來一個驅(qū)動LOGIN的東西就叫l(wèi)ogin吧
 // 這個context是官方寫的,應(yīng)該叫什么無所謂
 login (context) {
  context.commit('LOGIN')
 },
 // 同樣來個logout
 logout (context) {
  context.commit('LOGOUT')
 }
}

export default new Vuex.Store({
 state,
 mutations,
 actions
})

我感覺應(yīng)該就這樣就可以了吧,還是要測試一下

不對還應(yīng)該要把action掛到該掛的地方,然后該引用store狀態(tài)的地方引用store的數(shù)據(jù)

先去登錄頁面掛action

應(yīng)該是這樣的,注冊也是一樣

然后是登出的頁面

header.vue

同時我們就不在創(chuàng)建頁面的時候從sessionStorage取數(shù)據(jù)了

還有一個main.js

要是不能在main.js里面生效還真是麻煩啊,試想一下,已登錄用戶直接去了/login頁面,seeionStorage里面用戶數(shù)據(jù)清除了,但store里面的數(shù)據(jù)又沒更新,那在頭部不是還掛一個頭像啊???

還有一步獲取store里面的數(shù)據(jù)

header.vue

還是趕緊測試一下吧

哭了.....直接四個錯誤

這我都是照著官方說的寫的啊

 

把header.vue的數(shù)據(jù)注釋掉,還有一個錯誤

但這個dispatch 是undefined 是啥意思啊,我是照著寫的啊,大佬幫我解惑一下啊

把dispatch 改成context 也不行

改成commit 試一下

還是一樣沒脾氣了,我再去看看資料吧

研究了好久解決了一部分問題

首先我把store.js,里面的action寫成了這樣


但我覺得原來的寫法也沒有錯

然后在main.js里面注釋掉了這句


然后就正常了,dispatch是正確的,所以我所擔(dān)心的事果然發(fā)生了

先去登錄


可以看見header右上方的確立刻變成了用戶信息,達(dá)到了要求,然而我要是自己去地址欄輸入/login



跳到了登錄頁面,但頭像真的還掛在右上角........,說明store里面真的還是登錄的數(shù)據(jù),雖然仔細(xì)想想其實這并沒有什么影響,他要是再一次登錄成功,數(shù)據(jù)自然也就變了,而且一般沒人會這么去訪問登錄頁面,但心里覺得這樣不對啊。

而且我覺得這個action的分發(fā)應(yīng)該有辦法寫在main.js里面的,不知道有沒有大神指點一二!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue實現(xiàn)Excel本地下載及上傳的方法詳解

    Vue實現(xiàn)Excel本地下載及上傳的方法詳解

    相信大家在項目中經(jīng)常會遇到一些上傳下載文件的相關(guān)功能。這篇文章將為大家介紹一下Vue實現(xiàn)Excel本地下載及上傳的示例代碼,需要的可以參考一下
    2022-07-07
  • vue中設(shè)置echarts寬度自適應(yīng)的代碼步驟

    vue中設(shè)置echarts寬度自適應(yīng)的代碼步驟

    這篇文章主要介紹了vue中設(shè)置echarts寬度自適應(yīng)的問題及解決方案,常常需要做到echarts圖表的自適應(yīng),一般是根據(jù)頁面的寬度做對應(yīng)的適應(yīng),本文記錄一下設(shè)置echarts圖表的自適應(yīng)的步驟,需要的朋友可以參考下
    2022-09-09
  • el-upload多選文件上傳報錯解決方案

    el-upload多選文件上傳報錯解決方案

    本文主要介紹了el-upload多選文件上傳報錯解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Vue Computed底層原理深入探究

    Vue Computed底層原理深入探究

    computed是vue的配置選項,它的值是一個對象,其中可定義多個計算屬性,每個計算屬性就是一個函數(shù),下面這篇文章主要給大家介紹了關(guān)于vue中計算屬性computed的詳細(xì)講解,需要的朋友可以參考下
    2022-08-08
  • VUE使用ElementUI下拉框 @change事件數(shù)據(jù)不回顯問題

    VUE使用ElementUI下拉框 @change事件數(shù)據(jù)不回顯問題

    這篇文章主要介紹了VUE使用ElementUI下拉框 @change事件數(shù)據(jù)不回顯問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Vue3+X6流程圖實現(xiàn)數(shù)據(jù)雙向綁定詳解

    Vue3+X6流程圖實現(xiàn)數(shù)據(jù)雙向綁定詳解

    這篇文章主要為大家詳細(xì)介紹了Vue3如何結(jié)合X6流程圖實現(xiàn)數(shù)據(jù)雙向綁定,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • vue?this.$router.go(-1);返回時如何帶參數(shù)

    vue?this.$router.go(-1);返回時如何帶參數(shù)

    這篇文章主要介紹了vue?this.$router.go(-1);返回時如何帶參數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • vue.js實現(xiàn)點擊圖標(biāo)放大離開時縮小的代碼

    vue.js實現(xiàn)點擊圖標(biāo)放大離開時縮小的代碼

    這篇文章主要介紹了vue.js實現(xiàn)點擊圖標(biāo)放大離開時縮小,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • vue 中自定義指令改變data中的值

    vue 中自定義指令改變data中的值

    這篇文章主要介紹了vue 中自定義指令改變data中的值,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • 利用Vue實現(xiàn)卡牌翻轉(zhuǎn)的特效

    利用Vue實現(xiàn)卡牌翻轉(zhuǎn)的特效

    這篇文章主要介紹了如何利用Vue實現(xiàn)一個春節(jié)抽??撁?,采用了卡牌翻轉(zhuǎn)的形式。文中的實現(xiàn)方法講解詳細(xì),快跟隨小編一起學(xué)習(xí)一下吧
    2022-02-02

最新評論