store中存取的爲整個項目的公共變量,經過設置mutation來改變他們vue
假設現有以下代碼:vuex
const store = new Vuex.Store({ state: { userInfo:{ name:'' } }, mutations: { setuserInfo:(state,value) => { const obj = state; obj.userInfo = value } }, getters:{ } })
咱們定義了一個userInfo變量,經過mutation方法,this
1,在頁面A中 咱們開啓keepAlive,並在第一次mounted的時候將該頁面的userInfo(記錄爲vara)賦值爲this.$store.state.userInfo(記錄爲varb);spa
2,而後咱們在B頁面中改變store中的這一變量:this.$store.commit('setuserInfo',res);code
3,當咱們回到A頁面時,發現userInfo仍是改變了,那麼問題來了 ,我只在mounted的時候 將varb的一份引用複製給vara,以後在B頁面改變的時候 使得 vara的指向另一個res,按理來講vara仍是指向以前的varb,但是結果仍舊是vara改變了blog
可能的緣由解釋:get
在3步驟中咱們聲明瞭個一個賦值操做:源碼
const obj = state; obj.userInfo = value
這一步的根本意思應該是將 state.
userInfo 按照屬性一一賦值於value;即爲了保證初始的那個引用,這裏的vue內部實際操做應該是: for(let j in value){ obj.userInfo[j] = value[j]}保證了其初始應用,那麼 this.userInfo和this.$store.state,userInfo始終指向同一個應用,因此this.userInfo也跟着改變了未深刻vuex源碼 ,因此是否這樣解釋正確??未完待續。。。。。。。。。。。。