問題一:什么是vuex?
回答:Vuex 是一個專為 Vue.js 應用程序開發的狀態管理器,采用 集中式存儲 管理應用的所有組件的狀態。
每一個 Vuex 應用的核心就是 store(倉庫)。“store”基本上就是一個容器,它包含着你的應用中大部分的狀態 (state)。
Vuex 和單純的全局對象有以下兩點不同:(重點)
1、Vuex 的狀態存儲是響應式的。當 Vue 組件從 store 中讀取狀態的時候,若 store 中的狀態發生變化,那么相應的組件也會相應地得到高效更新。
2、你不能直接改變 store 中的狀態。改變 store 中的狀態的唯一途徑就是顯式地提交 (commit) mutation。這樣使得我們可以方便地跟蹤每一個狀態的變化,從而讓我們能夠實現一些工具幫助我們更好地了解我們的應用。
vuex的核心概念和核心概念圖:
1、state - Vuex store實例的根狀態對象,用於定義共享的狀態變量。
2、Action -動作,向store發出調用通知,執行本地或者遠端的某一個操作(可以理解為store的methods)
3、Mutations -修改器,它只用於修改state中定義的狀態變量。
4、getter -讀取器,外部程序通過它獲取變量的具體值,或者在取值前做一些計算(可以認為是store的計算屬性)
詳解:
概念:
Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用 集中式存儲 管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。
解決的問題:
有了vue-router,可以將一個組件視為一個頁面來使用。由於組件只維護自身的狀態(data),組件創建時或者說進入路由時它們被初始化,切換至其他的組件頁時當前頁自然要被銷毀,從而導致data也隨之銷毀。
頁面與頁面之間總會產生各種需要的共享變量,如果通過$router.param或者$router.meta來傳遞是遠遠不夠的,很多情況下不得不采用window來保存一些全局的共享變量。
這樣出現的問題:vue是不會維護window的這些共享變量的。對於組件來講,這些變量都存在於組件作用域以外,組件並不會自動維護,這樣就違背了js編程規范或者風格規范的一條基本准則:全局變量是毒瘤,是具有極高副作用的。
當我們將window內的對象綁定到不同的自定義組件內,一旦要對window內的變量進行修改,會發現所有以對象方式綁定的自定義組件,當對象內的某個屬性發生改變時將不會執行自動刷新,所有的計算屬性也同時失效!更詭異的是這種情況並不是絕對出現的,當頁面元素相對簡單的時候一切都顯得很正常,一旦頁面元素增多,對應的交互操作增多時,這種奇怪的現象就會發送。
vuex就是專門解決頁面與頁面之間需要的共享變量的創建、維護、變更問題的。