vuex的疑點理解

2021-10-05 20:57:23 字數 1549 閱讀 3718

理解成:把多個元件中共享的變數全部儲存到乙個物件裡面,然後將這個物件放到頂層的vue例項中,這樣多個元件就可以共享這個物件中的所有變數屬性,類似於倉庫,類似於前端資料庫

其它語言中的單例模式,也正如這樣的思想

為什麼會產生了vuex?

乙個物件如何被所有元件共享呢?

所有的元件都繼承vue的乙個原型,所以一旦給vue的原型上加上乙個原型的話,那麼所有的元件就都有了這個物件屬性了,就可以拿到這個物件屬性去呼叫它的屬性和方法了

vue.prototype.shareobj = shareobj

在main.js中引用了store,router,每個元件都可以拿到$store,$router,正是因為底層進行了這樣的賦值vue.prototype.$store = store,vue.prototype.$router = router

但是我們自己封裝的物件做不到響應式,屬性值改變,介面上資料也變化,沒法像data一樣,能把屬性放到vue的響應式系統中,所以官方提供了乙個vuex外掛程式,就是專門來彌補自己封裝物件做不到響應式缺陷的

實際開發中,什麼東西要放vuex中呢,什麼東西放到元件內部呢?

父元件中有乙個狀態屬性,子元件中也想要用下這個狀態,這種情況是沒必要放到vuex的,使用元件間通訊就可以了

需要放到vuex中的情景:

1.使用者的登入狀態,很多介面都需要用到,因為很多介面在去伺服器請求資料的時候,都需要攜帶token令牌,有一些資料是需要登入的時候才能請求到,這個時候就需要在傳送請求的引數裡面攜帶token,如果沒有token是請求不到資料的,這個時候就需要把使用者登入成功後伺服器給返回的token放到vuex中

2.使用者名稱,頭像,地理位置資訊

3.商品的收藏,購物車中的物品

4.設定介面

區分一下單介面狀態管理和多介面狀態管理?

單介面狀態管理:只要自己的元件內部使用data和methods就可以了,自己內部資料的變化不影響其它頁面

多介面狀態管理:多個檢視都依賴同乙個狀態,乙個狀態改變了,多個介面都會進行更新,不同介面的aciton都能修改某個狀態

不同介面讀取和修改都要安裝規定好的格式

為什麼是在mutations改變狀態呢?

不是在actions中,vue為vuex的開發提供了乙個瀏覽器外掛程式devtools,是裝在瀏覽器端的,它可以跟蹤記錄哪個元件修改過得state狀態,如果出問題了,可以方便查詢哪個元件改錯了

只要是修改state狀態,一定是通過mutation去改的,這樣devtools才能幫助記錄

為什麼需要actions呢?

沒有actions這一步也是可以的,官方文件中也是允許這樣做的,當你在修改mutation的時候,如果有非同步操作,不在直接在mutation中去操作,因為mutation中做的操作都是同步操作,一旦mutation與非同步操作,devtools是跟蹤不到的,有非同步操作先提交到action中去操作,再提交給mutation中,就變為同步操作了,因為非同步操作在action中已經做完了。

使用action的場景:傳送網路請求,這是非同步操作,必須放到action中去操作

Vuex我的理解

vuex 是乙個專門為vue.js應用程式開發的狀態管理模式 雖然 vuex 可以幫助我們管理共享狀態,但也附帶了更多的概念和框架。這需要對短期和長期效益進行權衡。如果不打算開發大型單頁應用,使用 vuex 可能是繁瑣冗餘的。確實是如此 如果您的應用夠簡單,您最好不要使用 vuex。乙個簡單的 gl...

vuex的深度理解

vuex是乙個專為vue.js應用程式開發的狀態管理模式,它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證以一種可 的方式發生變化。原先資料需要儲存到各自vue例項物件的data中,當使用vuex之後,就可以將data中的資料集中管理到vuex中。讓vue中渲染頁面的工作和與後台互動的邏...

重新理解vuex

在state中定義狀態 islogin false 路由中引入store.js,並使用值 import store from store store.state.islogin 或 store.state.islogin 使用state中的islogin,如上圖,我們無法直接修改state中的值,必...