在了解這個問題之前,我們首先要知道vuex是什么蠢络,用來解決什么問題衰猛。
引用vuex官網(wǎng)的一句話:
Vuex 是一個專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài)刹孔,并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化啡省。
那什么是“狀態(tài)管理模式”呢?
把組件的共享狀態(tài)抽取出來芦疏,以一個全局單例模式管理冕杠,通過強(qiáng)制規(guī)則維持視圖和狀態(tài)間的獨(dú)立性。
vuex用來解決的問題:
1酸茴、多個視圖依賴于同一狀態(tài)分预。
2、來自不同視圖的行為需要變更同一狀態(tài)薪捍。
那影響視圖的狀態(tài)修改有幾種方法呢笼痹?
1配喳、直接修改: this.$store.state.[變量] = xxx
2、使用commit修改:
this.$store.commit(commitType, payload)
this.$store.dispatch(actionType, payload)
那這兩種方法有什么異同點(diǎn)呢凳干?
相同點(diǎn):都可以修改state晴裹,并且也會觸發(fā)視圖的更新
不同點(diǎn):如果是在嚴(yán)格模式下strict: true,state的修改只要不經(jīng)過mutation都會報錯
那為什么建議使用commit修改state呢救赐?
在項(xiàng)目中涧团,每一個狀態(tài)樹對應(yīng)項(xiàng)目的一個狀態(tài),每次mutation代表一次項(xiàng)目狀態(tài)的改變经磅,mutation就是為了使我們可以更加直觀的觀察到項(xiàng)目狀態(tài)的變化泌绣。