vuex狀態樹state與輔助函式mapState

2021-09-04 13:04:15 字數 1435 閱讀 5650

state

單一狀態樹

vuex 用乙個物件就包含了全部的應用層級狀態。

作為唯一資料來源,每個應用將僅僅包含乙個 store 例項。

單狀態樹、模組化、狀態、狀態變更事件分布

由於 vuex 的狀態儲存是響應式的,從 store 例項中讀取狀態最簡單的方法就是在計算屬性中返回某個狀態:

computed: 

}每當 this.$store.state.count 變化的時候, 都會重新求取計算屬性,並且觸發更新相關聯的 dom。

state在vuex中的定位類似於data在vue中的定位:state(vuex) ≈ data (vue)

都是用於儲存一些資料,或者說狀態值.這些值都將被掛載 資料和dom的雙向繫結事件。

也就是當你改變值的時候可以觸發dom的更新.

state在使用的時候一般被掛載到子元件的computed計算屬性上,這樣有利於state的值發生改變的時候及時響應給子元件.

當然使用data去接收$store.state也可以接收到值,但由於這只是乙個簡單的賦值操作,

因此state中的狀態改變的時候不能被vue中的data監聽到。

mapstate 輔助函式

當乙個元件需要獲取多個狀態時候,將這些狀態都宣告為計算屬性會有些重複和冗餘。

mapstate是state的語法糖,輔助函式幫助生成計算屬性。

//  在使用mapstate之前,要匯入這個輔助函式.

import from 'vuex'

export default

})}需要注意的是:箭頭函式的this指標並沒有指向vue例項,因此不要濫用箭頭函式

當對映的計算屬性的名稱與 state 的子節點名稱相同時,可以給 mapstate 傳乙個字串陣列。

computed: mapstate([

// 對映 this.count 為 store.state.count

'count'

])物件展開運算子

mapstate 函式返回的是乙個物件。

將它與區域性計算屬性混合使用,使用乙個工具函式將多個物件合併為乙個,將最終物件傳給 computed 屬性。

物件展開運算子可以極大地簡化寫法:

count.js

countlist: ,

three: 6

}computed:

})},

元件仍然保有區域性狀態

使用 vuex 並不意味著需要將所有的狀態放入 vuex。

將所有的狀態放到 vuex 會使狀態變化更顯式和易除錯,但也會使**變得冗長和不直觀。

如果有些狀態嚴格屬於單個元件,最好還是作為元件的區域性狀態。

應該根據應用開發需要進行權衡和確定。

...展開運算子將mapstate中的物件的key和value展開混入到另乙個物件裡面

重置vuex所有state的狀態

效果 思路 主要是在store首次生成state後深拷貝出乙份備份,然後在reset方法中將各個屬性還原回去,注意最重要的是不要破壞原來資料的結構 我之前還看到有人用delete,資料屬性都沒了肯定是會報錯的 步驟1準備乙個深拷貝方法 定義乙個深拷貝函式 接收目標target引數 deepclone...

vuex的state狀態倉庫管理

vuex,在官網上的解釋是 vuex是乙個專為vue.js應用程式開發的狀態管理模式。它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可 的方式發生變化 state就是vuex中的資料倉儲,用於儲存所有元件的公共資料,資料需初始化且不支援直接修改。直接獲取state中的資料只需...

Vuex中的state訪問狀態物件

state 這個就是我們說的訪問狀態物件,它就是我們spa 單頁應用程式 中的共享值。如何把狀態物件賦值給內部物件,也就是把stroe.js中的值,賦值給我們模板裡data中的值。我們有三種賦值方式。一 通過computed的計算屬性直接賦值 computed屬性可以在輸出前,對data中的值進行改...