Vuex 也集成到 Vue" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > Vuex4.0的基本使用方法

Vuex4.0的基本使用方法

時(shí)間:2023-04-21 02:27:01 | 來源:網(wǎng)站運(yùn)營

時(shí)間:2023-04-21 02:27:01 來源:網(wǎng)站運(yùn)營

Vuex4.0的基本使用方法:

vuex 4.0

Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的**狀態(tài)管理模式**。它采用集中存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài)的方式,并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。

Vuex 也集成到 Vue 的官方調(diào)試工具 devtools extension (opens new window),提供了諸如零配置的 time-travel 調(diào)試、狀態(tài)快照導(dǎo)入導(dǎo)出等高級(jí)調(diào)試功能。

兩種使用方法:

官網(wǎng)圖片




官方給了兩個(gè)流程圖,一個(gè)簡單的,我們就不看了。

還有一個(gè)復(fù)雜一點(diǎn)的,如下圖:

研究了好久,總算是了解了一點(diǎn)。并且嘗試翻譯了一下。

翻譯圖片

應(yīng)該沒有翻譯錯(cuò)吧。

不太理解,為啥設(shè)置了可以直接訪問后端的方法,前端的狀態(tài)和后端有啥關(guān)系呢?目前能想到的就只有登錄狀態(tài)了。

組件問vuex,用戶登錄了沒?vuex就只能問后端。

等等,不是應(yīng)該在前端緩存一個(gè)登錄狀態(tài)嗎?

用戶在登錄頁面完成登錄后,后端會(huì)返回一個(gè)token,然后緩存在前端,以后其他地方問是否登錄,直接看這個(gè)token不就可以了嗎?為啥還有問后端要數(shù)據(jù)?

如果不需要的話,我就想不出來還有啥狀態(tài)關(guān)系到后端API了。

所以另一個(gè)理解就是,vuex其實(shí)是支持直接從后端獲取數(shù)據(jù),然后存入state的,也就是說可以把state當(dāng)作大號(hào)data來看待。

  1. 組件發(fā)起一個(gè)申請(qǐng),要獲得一個(gè)狀態(tài)。
2. action收到申請(qǐng)后,可以去后端詢問,然后通過 commit(mutations) 把需要的狀態(tài)寫入 state 里面,這是可以通過瀏覽器插件看到 state 的數(shù)據(jù)。

4. 最后通過 getters 返回給組件。

我在這個(gè)流程里面加上了一個(gè)前端存儲(chǔ)的功能,也就是說可以把 state 存在前端,這樣刷新、關(guān)掉瀏覽器、關(guān)機(jī)重啟等情況,state 的數(shù)據(jù)都不會(huì)丟失了。便于恢復(fù)狀態(tài)。

state 的類型

我們先來定義一個(gè)簡單的state,看看在vue3里面有什么變化。

state: { count: 0, myObject: { time: '現(xiàn)在的時(shí)間' } }一個(gè)簡單類型(number)的count,還有一個(gè)引用類型的myObject。

我們打印出來看看效果:

const store = useStore() // 看看state的類型 console.log('state:', store.state) console.log('state.count:', store.state.count) console.log('state.myObject:', store.state.myObject)整個(gè)state變成了reactive的形式,看來在vue3里面,vuex直接采用reactive來實(shí)現(xiàn)state的響應(yīng)性。

簡單類型沒有啥變化,沒有變成ref的形式,所以直接使用簡單類型的話,還是需要以前的方式。

直接查看 state 的時(shí)候,里面的對(duì)象還是普通對(duì)象,但是當(dāng)單獨(dú)看的時(shí)候就變成了 reactive 的形式。

這是啥時(shí)候變的?想不出來。

嘗試了一下,可以用,不會(huì)報(bào)錯(cuò),也會(huì)正常運(yùn)行,但是由于 vuex 可以自動(dòng)把普通對(duì)象變成 reactive 的形式了,那么我們?cè)僮约杭由暇蜎]啥意義了。

這個(gè)也嘗試了一下,可以用,但是有點(diǎn)小變化。

如果是簡單類型的 ref,ref 會(huì)失效、消失,直接變成普通的簡單類型。

如果是對(duì)象類型的 ref,會(huì)變成 reactive 的形式。

所以用 ref 也是沒啥意義。

不建議直接改變 state(狀態(tài))

首先官方說要用“提交 mutation”的方式來改變狀態(tài),那么這個(gè)“mutation”是啥意思呢?我查了一下字典,是“突變”的意思。

沒有用常見的“set”,而是用了這個(gè)“突變”,大概是想強(qiáng)調(diào)“狀態(tài)的變化”吧。

從面向?qū)ο蟮慕嵌葋砜?,state是狀態(tài)管理類的內(nèi)部成員,外部不應(yīng)該可以直接讀寫,而是要通過“屬性”來操作,只不過js環(huán)境嘛,有的時(shí)候有點(diǎn)控制不住。

而vuex雖然說要用 mutation 來改變state,但是并沒有把其他的修改方式給堵死,留了很多漏洞,但是我們還是應(yīng)該遵守官方的建議,不要直接修改狀態(tài)。

好吧,其實(shí)我也不太清楚為啥不能這樣做,直接讀寫不是很爽的事情嗎?

只是 vuex 都第四個(gè)大版本了,這么建議應(yīng)該是有一定道理的,所以我們應(yīng)該還是盡量遵守一下的好。

我們先來看看讀取狀態(tài)的各種方式。

state的類型

先定義一個(gè)簡單的state

state: { count: 0, myObject: { time: '現(xiàn)在的時(shí)間:' }, myArray: [1,2,2,3,4] },簡單類型、對(duì)象和數(shù)組,比較有代表性的類型。

這里的類型指的不是 js 的基礎(chǔ)類型,而是說vue3提供的ref和reactive。

因?yàn)?vuex 把 state 變成了 reactive 的形式,所以我們要先弄清楚這一點(diǎn),然后才能更好的使用其帶來的優(yōu)勢(shì),否則豈不是白白浪費(fèi)了嗎。

// 整體獲取 const allStateManage = () => { const store = Vuex.useStore() // 看看state的類型 console.log('state:', store.state) console.log('state.count:', store.state.count) console.log('state.myObject:', store.state.myObject) return { allState } }整個(gè)state就是reactive的,成員又是什么樣子的呢?

setup里面的vuex的使用方式

import { useStore } from 'vuex'setup() { const store = useStore()}這樣獲取store,然后就可以按照“$store”的習(xí)慣來操作了。

直接獲取 state

// 整體獲取 const allStateManage = () => { const store = Vuex.useStore() // 獲得整體的state const allState = store.state console.log('allState:', allState) console.log('================') // 定時(shí)修改 count 看響應(yīng)性 setTimeout(() => { // store.commit('setCount') // allState.count += 101 // 會(huì)直接改vuex的state }, 1000) return { allState } }

獲取state的成員

// 直接獲取成員 const stateMemberManage = () => { const store = Vuex.useStore() // 看看state的類型 let memberCount = store.state.count // 失去響應(yīng)性 const memberObject = store.state.myObject console.log('memberCount', memberCount) console.log('memberObject', memberObject) console.log('================') // 定時(shí)修改 count 看響應(yīng)性 setTimeout(() => { memberCount += 101 // const 定義的會(huì)報(bào)錯(cuò),不允許賦值,常量。 // let 定義的可以修改,但是沒有相應(yīng)性 }, 1000) return { memberCount, memberObject } }

間接獲取state

// 間接獲取 const indirectManage = () => { const store = Vuex.useStore() // 用toRef獲取 count,有相應(yīng)性,可以直接修改state const refCount = Vue.toRef(store.state, 'count') // 計(jì)算屬性獲取count,有相應(yīng)性,不可以直接修改state const comCount = Vue.computed(() => store.state.count) // 只讀的對(duì)象,有相應(yīng)性,淺層不可以修改,但是深層還是可以修改。 const readonlyObject = Vue.readonly(store.state.myObject) console.log('refCount:', refCount) console.log('comCount:', comCount) console.log('readonlyObject:', readonlyObject) console.log('================') // 定時(shí)修改 count 看響應(yīng)性 setTimeout(() => { // store.commit('setCount') // refCount.value += 200 // 會(huì)直接改vuex的state }, 2000) return { refCount, comCount, readonlyObject } }因?yàn)橐妙愋蜁?huì)自動(dòng)變成reactive的形式,而reactive又可以直接修改state,那么就有可能誤操作,導(dǎo)致修改state的情況,那么如何預(yù)防呢?可以使用vue提供的readonly。

處理后返回state

// 處理后返回 const operationManage = () => { const store = Vuex.useStore() // 計(jì)算屬性獲取count const addCount = '' // Vue.computed(() => store.state.count++) const getAddCount = store.getters.getAddCount const comGetAddCount = Vue.computed(() => store.getters.getAddCount) const filterArray = store.getters.filterArray(2) const comFilterArray = Vue.computed(() => store.getters.filterArray(2)) console.log('addCount :', addCount) console.log('getAddCount :', getAddCount) console.log('comGetAddCount :', comGetAddCount) console.log('filterArray :', filterArray) console.log('================') return { addCount, getAddCount, comGetAddCount, filterArray, comFilterArray } }

封裝讀取方式

看到上面這些讀取方式,是不是一個(gè)頭兩個(gè)大?

這也太復(fù)雜了吧,我到底應(yīng)該用什么方式?

我覺得把這個(gè)問題留給組件里面決定,這是不負(fù)責(zé)任的方式。

我們應(yīng)該做一個(gè)獨(dú)立的js文件,然后在里面根據(jù)公司的要求,或者事先的約定,依據(jù)業(yè)務(wù)需求、項(xiàng)目需求來確定采用哪種方式。

在js文件里面封裝好之后,組件里直接調(diào)用就好,不用管其他。

這樣就好維護(hù)多了。

我們做一個(gè)js文件

const map = () => { const store = Vuex.useStore() /** * 獲取count, * 用computed實(shí)現(xiàn)相應(yīng) */ const getCount = () => { return Vue.computed(() => store.state.count) } /** * 獲取count, ** 用 ref 實(shí)現(xiàn)相應(yīng) */ const getRefCount = () => { return Vue.ref(store.state.count) } /** * 獲取對(duì)象 */ const getObject = () => { return store.state.myObject } /** * 獲取只讀對(duì)象 */ const getReadonlyObject = () => { return Vue.readonly(store.state.myObject) } /** * 獲取數(shù)組 */ const getArray = () => { return store.state.myArray } /** * 獲取只讀數(shù)組 */ const getReadonlyArray = () => { return Vue.readonly(store.state.myArray) } /** * 查詢數(shù)組 ** id:要查詢的數(shù)據(jù) */ const filterArray = (id) => { return Vue.computed(() => store.getters.filterArray(id)) } return { getCount, getRefCount, getObject, getReadonlyObject, getArray, getReadonlyArray, filterArray }}export default map這樣就可以把麻煩事交給抽離處理的js來處理了,組件只需要調(diào)用就好,不用管其他的。

setup 組合API的威力

最后附一下setup的代碼,vue3的composition的方式實(shí)在是太方便了

setup() { // 傳說中的setup const store = Vuex.useStore() // 狀態(tài)的控制事件 const setCount = () =>{ store.commit('setCount') store.commit('setTime') store.commit('setArray') store._mutations.setCount[0] // 這是什么? } // 獲取state const { allState } = allStateManage() // 直接獲取成員 const { memberCount, memberObject } = stateMemberManage() // 間接獲取成員 const { refCount, comCount, readonlyObject } = indirectManage() // 間接獲取成員 const { addCount, getAddCount, comGetAddCount, filterArray, comFilterArray } = operationManage() // 通過map 獲取 count // 可以使用別名 const { getCount: mapGetCount } = map() const mapCount = mapGetCount() return { // 返回給模板,否則模板訪問不到。 // 直接獲取state allState, // 直接獲取成員 memberCount,memberObject, // 間接獲取 refCount, comCount,readonlyObject, // 操作后獲取 addCount,getAddCount,comGetAddCount,filterArray,comFilterArray, // map mapCount, // 設(shè)置state setCount } }具體實(shí)現(xiàn)方式寫成各種函數(shù),可以放在單獨(dú)的js文件里面。

setup只需要引用進(jìn)來就行,然后return給模板。

這樣代碼就不亂了。

可否放飛自我?

對(duì)于簡單的項(xiàng)目來說,應(yīng)該可以把state當(dāng)作大號(hào)data來做,負(fù)責(zé)組件直接的數(shù)據(jù)傳遞,不用管是不是狀態(tài),是不是可以直接修改的要求。

這個(gè)總比自己去研究 Provide / Inject 要好吧,因?yàn)檫@個(gè)也是想利用reactive的響應(yīng)性來實(shí)現(xiàn)需求的呀,那么state就是一個(gè)reactive,我們何必另起爐灶呢?

另外,以后需求變化了,業(yè)務(wù)更復(fù)雜了,自己想的解決方法就要不斷的改進(jìn),到最后就會(huì)發(fā)現(xiàn),自己又實(shí)現(xiàn)了一個(gè)vuex。




vuex的修改狀態(tài)的方式就簡單多了,嚴(yán)格的說只有一個(gè),另外還有一個(gè)間接的,一個(gè)屬于漏洞。




直接修改?強(qiáng)烈不建議

因?yàn)関uex沒有完全把state封裝進(jìn)去,又或者由于js太過開放,無法完全制止隨意修改的行為,所以vuex干脆就沒堵這個(gè)漏洞,只是看我們自覺了。

到處修改有哪些危害呢?

所以要統(tǒng)一修改,統(tǒng)一管理,這樣不容易亂套。

mutations

這個(gè)是官方推薦的方法,其含義是“突變”,只能用這種方法來修改狀態(tài)。

我們來寫幾個(gè)簡單的例子

mutations: { // 計(jì)數(shù)器 setCount(state, num = 1) { state.count += num }, // 設(shè)置當(dāng)前時(shí)間 setTime(state) { state.myObject.time = '現(xiàn)在時(shí)間:' + new Date() }, // 設(shè)置數(shù)組的值 setArray(state) { state.myArray[1] = 4 } },固定為state,這是默認(rèn)設(shè)置沒法改的。

這個(gè)是我們可以由外部傳入的參數(shù),如果我們需要傳入多個(gè)參數(shù)的話,需要作出對(duì)象的形式。

使用方法也很簡單:

store.commit('setCount', val)我們還是看看內(nèi)部結(jié)構(gòu):

紅框是我們調(diào)用 mutations 里面的事件的函數(shù)。

籃框是我們定義的 mutations 的各種事件。

桔色框是我們定義的state。




那么那個(gè)【f】是啥呢?我們?cè)匍_一層

反正不是正常的函數(shù)。




Vuex 中的 mutation 非常類似于事件:每個(gè) mutation 都有一個(gè)字符串的 事件類型 (type) 和 一個(gè) 回調(diào)函數(shù) (handler)。這個(gè)回調(diào)函數(shù)就是我們實(shí)際進(jìn)行狀態(tài)更改的地方,并且它會(huì)接受 state 作為第一個(gè)參數(shù):
官方這么說的,我水平有限,大概涉及到了原型鏈那方面的了。

mutations 必須是同步操作

官網(wǎng)說,如果異步操作的話,devtool 會(huì)弄不清楚上下文,我也沒搞懂。

反正需要異步的話,可以用action。就不糾結(jié)這個(gè)事情了。

使用常量代替字符串

mutations 的事件名稱是字符串的形式,這個(gè)容易寫錯(cuò),那么怎么辦呢?我們可以使用常量。

在單獨(dú)文件里面定義

// mutation-types.jsexport const Set_Count = 'set_count'然后引入這個(gè)文件,并且定義事件

import { Set_Count, Set_Count_sy } from './mutation-types.js' mutations: { // 計(jì)數(shù)器 setCount(state, num = 1) { state.count += num }, [Set_Count](state, num = 1) { state.count += num },調(diào)用

// 需要先引入 mutation-types.jsstore.commit(Set_Count_sy)這樣你就可以,,,等等,我要是故意寫錯(cuò)會(huì)給出提示嗎?

這個(gè),,,要看你用的編輯器是否支持了。至少我用的這個(gè)就沒有啥提示,運(yùn)行的時(shí)候,單擊按鈕才會(huì)保存,不執(zhí)行到那一行,都不帶出錯(cuò)的。so。。。

使用symbol

那么是否可以使用ES6新出的symbol呢?

我嘗試了一下,報(bào)錯(cuò)了。

要么是我的代碼有問題,要么是vuex的 mutations 不支持symbol。

action 的用法

由于mutation不支持異步操作,所以vuex又提供了action,這個(gè)可以支持異步,在有些情況下就會(huì)非常方便。

異步操作分為兩種情況,一個(gè)是內(nèi)部的異步操作,一個(gè)是外部的異步操作。

比如訪問后端API獲取數(shù)據(jù)的時(shí)候,又或者把數(shù)據(jù)存入前端存儲(chǔ)的時(shí)候。

我們先寫個(gè)簡單的例子

actions: { // 異步獲取數(shù)組 getArray(context) { console.log('================================') console.log('異步getArray——context', context) setTimeout(() => { context.commit('setArray', new Date().valueOf()) }, 1000) }, // 異步獲取數(shù)組 getArrayPromise(context) { return new Promise((resolve, reject) => { console.log('================================') console.log('異步 getArrayPromise ——context', context) setTimeout(() => { const time = new Date().valueOf() context.commit('setArray', time) resolve(time) }, 2000) }) }看看參數(shù)

獲取數(shù)據(jù)后,通過commit改變狀態(tài),然后就完成了,簡單方便。

缺點(diǎn):調(diào)用者不知道啥時(shí)候加載完畢。

有的時(shí)候外部需要明確獲知啥時(shí)候加載完成了,這樣就需要返回一個(gè)promise。

我們new 一個(gè) Promise就可以了,里面可以用axios等各種操作。

最后記得返回new出來的實(shí)例。

組件里的調(diào)用方法

// 異步操作 const actionManame = () => { const store = Vuex.useStore() const getArray = store.dispatch('getArray') console.log('外部調(diào)用 getArray', getArray) getArray.then((data) => { console.log('===========') console.log('getArray 異步操作完成,返回?cái)?shù)據(jù):', data) console.log('===========') }) const getArrayPromise = store.dispatch('getArrayPromise') console.log('外部調(diào)用 getArrayPromise', getArrayPromise) getArrayPromise.then((data) => { console.log('===========') console.log('getArrayPromise 異步操作完成,返回?cái)?shù)據(jù):', data) console.log('===========') }) return { getArray, getArrayPromise } } 如果不需要知道確定的完成時(shí)間的話,可以直接調(diào)用

store.dispatch('getArray') 如果要知道的話,可以寫個(gè)then

store.dispatch('getArrayPromise').then((data) => { console.log('異步操作完成,返回?cái)?shù)據(jù):', data) })這個(gè)用法和axios非常相似。

看看運(yùn)行效果

雖然我們沒有返回 promise實(shí)例的時(shí)候,外部也可以用then,但是這個(gè)是默認(rèn)的,并不是我們真正執(zhí)行操作后返回的。
我測(cè)試了一下,里面的 setTimeout 改成十秒,結(jié)果外面的then先執(zhí)行了,十秒后內(nèi)部操作完畢,外面沒有任何反應(yīng)。

所以外部調(diào)用,想要準(zhǔn)確獲知完成時(shí)間的話,還是要返回一個(gè)promise實(shí)例才行。

和axios配合使用

我們可以自己new 一個(gè)promise把a(bǔ)xios包含進(jìn)去,也可以直接返回axios的實(shí)例,比如這樣

// axios,返回自己 的 new promise getData(context) { return new Promise((resolve, reject) => { axios.get('demo.json') .then((response) => { const arr = response.data.company.formItem console.log('getData - axios - response', response) // context.commit('reloadArray', response.data.company.formItem) resolve(arr) }) .catch((error) => { console.log('getData - axios - error', error) }) }) }, // axios 返回 axios的promise getData(context) { const ajax = axios.get('demo.json') ajax.then((response) => { const arr = response.data.company.formItem console.log('getData - axios - response', response) // context.commit('reloadArray', response.data.company.formItem) }) .catch((error) => { console.log('getData - axios - error', error) }) return ajax // 直接返回 axios 的promise的實(shí)例 }調(diào)用方式

store.dispatch('getData').then((data) => { console.log('===========') console.log('getData 異步操作完成,返回?cái)?shù)據(jù):', data) console.log('===========') })這樣內(nèi)部和外部都可以得到axios返回的數(shù)據(jù)。

如何選擇就看對(duì)返回?cái)?shù)據(jù)的封裝程度了。

module 的用法

一開始以為模塊只能是一層,仔細(xì)看了官網(wǎng)才發(fā)現(xiàn),原來模塊還可以有n層,即子模塊、子子模塊、子子子模塊無窮匱也。而且還可以動(dòng)態(tài)注冊(cè)模塊。這是要瘋的節(jié)奏呀。

我還是感覺模塊應(yīng)該扁平化設(shè)計(jì),最多兩層,多了就容易亂套,理解起來也費(fèi)勁。

定義模塊

const user = { // namespaced: true, // 避免重名 state: () => ({ userInfo: { userId: 123, userCode: '', userNick: '' }, userRole: [] }), mutations: { setUser(state, code) { state.userInfo.userCode = code } }, getters: { getUser(state) { return state.userInfo } }, actions: { // { state, commit, rootState } setUsera (store, code) { store.commit('setUser', code) } }}export default user

state

這里有點(diǎn)變化,需要用返回函數(shù)的方式,原因和組件里的data的原因類似。這樣也就意味著一個(gè)模塊可以被多次加載進(jìn)來。

const userInfo = store.state.user.userInfo

getter

簡單的說,沒啥變化,傳遞進(jìn)來的state只包含自己模塊的state。

const userInfo2 = store.getters.getUser

mutations

簡單的說,也是沒啥變化,傳遞進(jìn)來的state只包含自己模塊的state,另一個(gè)參數(shù)是組件調(diào)用時(shí)傳遞進(jìn)來的參數(shù)。

store.commit('setUser', '要修改的數(shù)據(jù)')

action

簡單的說呢,也是只需要操作自己的模塊的就行。

這個(gè)參數(shù)是一個(gè)比較復(fù)雜的對(duì)象,全部成員如下圖,一般可以用結(jié)構(gòu)的方式獲取需要的參數(shù),比如這樣:{ state, commit, rootState }。

參數(shù)詳細(xì)內(nèi)容:

可以依據(jù)這些內(nèi)容實(shí)現(xiàn)各種功能。

第二個(gè)大參數(shù),就是組件調(diào)用的時(shí)候傳遞過來的參數(shù)。

store.dispatch('setUsera', '要修改的數(shù)據(jù)')

加載模塊到store

模塊代碼寫好了,如何加入進(jìn)來呢?其實(shí)很方便,可以直接寫,也可以掛個(gè)別名。

export default Vuex.createStore({ state: { count: 0, myObject: { time: '現(xiàn)在的時(shí)間:' }, myArray: [1,2,2,3,4] }, getters: {}, mutations: {}, actions: {}, modules: { // 注意:這個(gè)myObject會(huì)覆蓋掉根的myObject。 // 設(shè)置命名空間也沒有用,還是會(huì)覆蓋。 // 所以要避免重名。 myObject: user, user: user, person: user }})

命名空間

簡單的說,這個(gè)是避免命名重復(fù)的問題的。

我們可以把user模塊加載三次來看看區(qū)別。

不加命名空間

模塊的**導(dǎo)入名稱**會(huì)和根的 **根state的成員** 并列,如果重名的話,根的state成員會(huì)被覆蓋掉。

比如這里根state的成員myObject,就被覆蓋掉了。

藍(lán)色框是根的state的成員。

紅色框是被覆蓋的。

橙色框是兩個(gè)模塊。

會(huì)變成數(shù)組形式,每個(gè)模塊的同名都會(huì)被調(diào)用。

也會(huì)變成數(shù)組的形式,每個(gè)模塊的同名action都會(huì)被調(diào)用

只會(huì)保留一個(gè),另外兩個(gè)會(huì)報(bào)錯(cuò)。

加上命名空間

state不受影響,其他都會(huì)加上“路徑”作為區(qū)分。




* mutations 由斜線分隔組成的路徑,這樣可以明確區(qū)分是哪個(gè)模塊的函數(shù),不會(huì)弄錯(cuò)。

訪問方式:

store.commit('user/setUser', 'user的code')store.commit('myObject/setUser', 'myObject的code')store.commit('person/setUser', 'person的code')可以分別給每個(gè)模塊的state設(shè)置內(nèi)容,那么其實(shí)就是一個(gè)模塊。

也是由斜線區(qū)分。

訪問方式:

store.dispatch('user/setUsera', 'action的user的code')訪問方式:

store.getters['user/getUser']因?yàn)橛行本€,所以需要用字符串的方式來訪問。

在線演示:




源碼:




關(guān)鍵詞:使用,方法,基本

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉