下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Vuex為什么需要模塊化
這篇文章主要介紹Vuex為什么需要模塊化,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!一、為什么需要模塊化前面我們講到的例子都在一個狀態(tài)樹里進行,當(dāng)一個項目比較大時,所有的狀態(tài)都集中在一起會得到一個比較大的對象,進而顯得臃腫,難以維護。為了解決這個問題,Vuex允許我們將store分割成模塊(module),每個module有自己的state,mutation,action,getter,甚至還可以往下嵌套模塊,下面我們看一個典型的模塊化例子const
moduleA
=
{
state:
{},
mutations:
{},
actions:
{},
getters:
{}
}
const
moduleB
=
{
state:
{},
mutations:
{},
actions:
{},
getters:
{}
}
const
store
=
new
Vuex.Store({
modules:
{
a:
moduleA,
b:
moduleB
}
})
store.state.a
//
moduleA的狀態(tài)
store.state.b
//
moduleB的狀態(tài)二、模塊的局部狀態(tài)模塊內(nèi)部的mutation和getter,接收的第一參數(shù)(state)是模塊的局部狀態(tài)對象,rootStateconst
moduleA
=
{
state:
{
count:
0},
mutations:
{
increment
(state)
{
//
state是模塊的局部狀態(tài),也就是上面的state
state.count++
}
},
getters:
{
doubleCount
(state,
getters,
rootState)
{
//
參數(shù)
state為當(dāng)前局部狀態(tài),rootState為根節(jié)點狀態(tài)
return
state.count
*
2
}
},
actions:
{
incremtnIfOddRootSum
(
{
state,
commit,
rootState
}
)
{
//
參數(shù)
state為當(dāng)前局部狀態(tài),rootState為根節(jié)點狀態(tài)
if
((state.cont
+
rootState.count)
%
2
===
1)
{
commit('increment')
}
}
}
}三、命名空間(這里一定要看,不然有些時候會被坑)上面所有的例子中,模塊內(nèi)部的action、mutation、getter是注冊在全局命名空間的,如果你在moduleA和moduleB里分別聲明了命名相同的action或者mutation或者getter(叫some),當(dāng)你使用mit('some'),A和B模塊會同時響應(yīng)。所以,如果你希望你的模塊更加自包含和提高可重用性,你可以添加namespaced:true的方式,使其成為命名空間模塊。當(dāng)模塊被注冊后,它的所有g(shù)etter,action,mutation都會自動根據(jù)模塊注冊的路徑調(diào)用整個命名,例如:const
store
=
new
Vuex.Store({
modules:
{
account:
{
namespaced:
true,
state:
{...},
//
模塊內(nèi)的狀態(tài)已經(jīng)是嵌套的,namespaced不會有影響
getters:
{
//
每一條注釋為調(diào)用方法
isAdmin
()
{
...
}
//
getters['account/isAdmin']
},
actions:
{
login
()
{...}
//
dispatch('account/login')
},
mutations:
{
login
()
{...}
//
commit('account/login')
},
modules:
{
//
繼承父模塊的命名空間
myPage
:
{
state:
{...},
getters:
{
profile
()
{...}
//
getters['account/profile']
}
},
posts:
{
//
進一步嵌套命名空間
namespaced:
true,
getters:
{
popular
()
{...}
//
getters['account/posts/popular']
}
}
}
}
}
})啟用了命名空間的getter和action會收到局部化的getter,dispatch和commit。你在使用模塊內(nèi)容時不需要再同一模塊內(nèi)添加空間名前綴,更改namespaced屬性后不需要修改模塊內(nèi)的代碼。四、在命名空間模塊內(nèi)訪問全局內(nèi)容(GlobalAssets)如果你希望使用全局state和getter,roorState和rootGetter會作為第三和第四參數(shù)傳入getter,也會通過context對象的屬性傳入action若需要在全局命名空間內(nèi)分發(fā)action或者提交mutation,將{root:true}作為第三參數(shù)傳給dispatch或commit即可。modules:
{
foo:
{
namespaced:
true,
getters:
{
//
在這個被命名的模塊里,getters被局部化了
//
你可以使用getter的第四個參數(shù)來調(diào)用
'rootGetters'
someGetter
(state,
getters,
rootSate,
rootGetters)
{
getters.someOtherGetter
//
->
局部的getter,
‘foo/someOtherGetter'
rootGetters.someOtherGetter
//
->
全局getter,
'someOtherGetter'
}
},
actions:
{
//
在這個模塊里,dispatch和commit也被局部化了
//
他們可以接受root屬性以訪問跟dispatch和commit
smoeActino
({dispatch,
commit,
getters,
rootGetters
})
{
getters.someGetter
//
'foo/someGetter'
rootGetters.someGetter
//
'someGetter'
dispatch('someOtherAction')
//
'foo/someOtherAction'
dispatch('someOtherAction',
null,
{root:
true})
//
=>
‘someOtherAction'
commit('someMutation')
//
'foo/someMutation'
commit('someMutation',
null,
{
root:
true
})
//
someMutation
}
}
}
}五、帶命名空間的綁定函數(shù)前面說過,帶了命名空間后,調(diào)用時必須要寫上命名空間,但是這樣就比較繁瑣,尤其涉及到多層嵌套時(當(dāng)然開發(fā)中別嵌套太多,會暈。。)下面我們看下一般寫法computed:
{
...mapState({
a:
state
=>
state.some.nested.module.a,
b:
state
=>
state.some.nested.module.b
}),
methods:
{
...mapActions([
'some/nested/module/foo',
'some/nested/module/bar'
])
}
}對于這種情況,你可以將模塊的命名空間作為第一個參數(shù)傳遞給上述函數(shù),這樣所有的綁定會自動將該模塊作為上下文。簡化寫就是computed:
{
...mapStates('some/nested/module',
{
a:
state
=>
state.a,
b:
state
=>
state.b
})
},
methods:
{
...mapActions('some/nested/module',[
'foo',
'bar'
])
}六、模塊重用有時我們可能創(chuàng)建一個模塊的多個實例,例如:創(chuàng)建多個store,他
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《新編事業(yè)單位會計操作實務(wù)》教案
- 【管理課件】某公司中層管理人員述職報告
- 二零二五年度美容院品牌形象設(shè)計及使用權(quán)授權(quán)合同4篇
- 2024起重設(shè)備采購合同樣本:附帶起重機吊裝作業(yè)安全管理協(xié)議3篇
- 女性乳腺健康的保護方法
- 2025年度新能源產(chǎn)品代銷合同范本3篇
- 2024年08月中國光大銀行南通分行投行團隊負責(zé)人招聘筆試歷年參考題庫附帶答案詳解
- 2024年07月中國人民銀行分支機構(gòu)和部分所屬單位人員錄用招考筆試南京考點考生須知筆試歷年參考題庫附帶答案詳解
- 2025年醫(yī)療病床配件項目投資可行性研究分析報告
- 加油站的區(qū)域布局
- 冬春季呼吸道傳染病防控
- 【物 理】2024-2025學(xué)年八年級上冊物理寒假作業(yè)人教版
- 2024年計算機二級WPS考試題庫380題(含答案)
- 中醫(yī)藥膳學(xué)課件
- 教科版二年級下冊科學(xué)第一單元測試卷(含答案)
- 春節(jié)值班安排通知
- 下腔靜脈濾器置入術(shù)共27張課件
- 人教小學(xué)四年級上冊數(shù)學(xué)知識點歸納
- 2022年上海健康醫(yī)學(xué)院職業(yè)適應(yīng)性測試題庫及答案解析
- 安徽省血液凈化??谱o士臨床培訓(xùn)基地條件
- 腦橋解剖ppt課件
評論
0/150
提交評論