vuex
安裝
vue add vuex
起始
state
將應用全域性狀態定義在state中
state:
mutation
修改state只能通過mutation
mutations:
,logout
(state)
}
獲取和修改狀態
使用store.state獲取狀態
@click
="login"
v-if
="!store.state.islogin"
>
登入button
>
@click
="logout"
v-else
>
登出button
>
修改狀態只能通過store.dispatch(mutation)
this
.$s-tore.
commit
('login'
)this
.$store.
commit
('logout'
)
action
action類似於mutation,不同在於:
login
(, username)
else},
1000)}
)}
派發動作
this
.$store.
dispatch
('login'
,'admin').
then((
)=>).
catch((
)=>
)
最佳實踐
模組化
使用modules定義多個子模組利於元件複雜狀態
import user from
'./user'
export
default
newvuex.store(}
)
移動先前登入狀態相關**到user.js
export
default
訪問方式響應變化
// login.vue
"login" v-if=
"!$store.state.user.islogin"
>登入<
/button>
this
.$store.
dispatch
('user/login'
,'admin').
then((
)=>).
catch((
)=>
)
mapstate()/mapmutation()/mapaction()import
from
'vuex'
computed:
@click
="login"
v-if
="!islogin"
>
登入button
>
action相關修改
import
from
'vuex'
methods:
,...
mapactions([
'user/login'
,'user/logout'])
}
getter
可以使用getters從store的state中派生出一些狀態
export
default
, mutations:},
getters:},
actions:
, username)
else},
1000)}
)}}}
嚴格模式
嚴格模式下,無論何時發生了狀態變更且不是由mutation函式引起的,將會丟擲錯誤,這能保證所有的狀態變更都能被除錯工具跟蹤到。開啟嚴格模式strict: true
const store =
newvuex.store
()
外掛程式
vuex的store接收plugins選項,這個選項暴露出每次mutation的鉤子。vuex外掛程式就是乙個函式,它接收store作為唯一引數:
const
myplugin
= store =>
註冊外掛程式:
const store =
newvuex.store
()
範例:實現登入狀態持久化,store/plugins/persist.js
export
default store =>
}// 使用者狀態發生變化時快取之
store.
subscribe
(muation, state)
=>
else
if(mutation.type ===
'user/logout')}
}
Vue 框架學習 十 Vuex
自己實現變數共享可以通過vue.prototype.shareobj shareobj 來實現,但不是響應式 狀態更新 同步方法 mutations 非同步操作 actions getters 模組劃分 modules view code 乙個專案使用乙個store物件來儲存所有的資訊,形成單個資料...
Vue知識點總結(VUEX篇)
vuex 是什麼?運用到了js設計模式中的單例模式,單例模式想要做到的是,不管我們嘗試去建立多少次,它都只給你返回第一次所建立的那唯一的乙個例項。vuex 使用單一狀態樹,用乙個物件就包含了全部的應用層級狀態。至此它便作為乙個 唯一資料來源 ssot 而存在。這也意味著,每個應用將僅僅包含乙個 st...
vuex的5個屬性的用法 vue篇
建立vuex.js 配置依賴 import vue from vue import vuex from vuex vue.use vuex exoprt var store default newvuex.store 定義屬性值 mutations 設定方法函式,注意 mutations不能有非同步...