使用vuex來管理數據


最近一直工作比較忙,博客已經鴿了好久了,趁着今天是周末,寫點東西吧

使用vuex來管理數據

  • 最近一直在用vue做項目,但是卻從來沒真正去用過vuex,因為一直感覺很復雜,其實真正去研究一下啊,就會發現很容易。

vuex中,有默認的五種基本的對象:

  • state:存儲狀態(變量)
  • getters:對數據獲取之前的再次編譯,可以理解為state的計算屬性。我們在組件中使用 $sotre.getters.fun()
  • mutations:修改狀態,並且是同步的。在組件中使用$store.commit('',params)。這個和我們組件中的自定義事件類似。
  • actions:異步操作。在組件中使用是$store.dispath('')
  • modules:store的子模塊,為了開發大型項目,方便狀態管理而使用的。這里我們就不解釋了,用起來和上面的一樣。

怎么引用這里就不介紹了,如果使用的是3.0cli,在創建項目的時候,選擇安裝vuex模塊,會自動配置好store.js,很方便

定義變量

  • 在store.js中,你會發現有我上面提到的那些對象,這里隨便定義個變量。

和頁面中在data寫變量差不多。

使用變量

  • 就和正常的變量使用是一樣的,只不過前面是$store
  • {{$store.state.count}}
  • 到這一步你就已經會了一小半了,很簡單的吧?

回想一下,我們只需要在下載安裝使用vuex,在我們定義的store.js中定義state對象,並且暴露出去。

在main.js中使用我們的store.js(這里是為了防止在各個組件中引用,因為main.js中,有我們的new Vue 實例啊!)

現在我們已經使用了vuex中的state,接下來我們如何操作這個值呢? 沒錯!用mutations和actions

我們繼續操作store.js文件


我們在sotre.js中定義mutations對象,該對象中有兩個方法,mutations里面的參數,第一個默認為state,接下來的為自定義參數。

  // 其實說白了就是通過其他頁面的方法來調用這里的方法,所以這里要寫對數據的操作,會直接同步到state
  mutations: {
    add(state, n) {
      state.xone = state.xone + n
    },
    remove(state, n) {
      if (state.xone > 0) {
        state.xone = state.xone - n
      } else {
        state.xone = 0
      }
    }
  },

然后我們在頁面中,使用這個方法

methods: {
    add (n) {
      // 首先,通過這個向vuex傳一個函數,括號內的就是函數名,傳到了actions里面。這個是異步更新的
      this.$store.dispatch('addFun', n)
      // 如果要直接修改state的值可以用下面這個,但是官方不推薦,這個是同步更新的
      // this.$store.commit('add', n)
    },
    remove (n) {
      // this.$store.commit('remove', n)
      this.$store.dispatch('removeFun', n)
    }
  },
  • 當然了,這個n參數也是可以不傳的,如果你需要一些計算的話,就傳上

然后打開瀏覽器試一下吧,我們可以看到每當觸發事件時,我們都可以在vue開發工具中看到我們觸發的mutations方法,以及參數

完美!


接下來就是actions,actions是異步操作

創建actions對象,並且使用

actions: {
    // 調用mutations的add方法,這個addFun是從其他頁面定義的方法,mutations則是接參數,這個參數對應上面的mutations,
    addFun(mutations, n) {
      // 這個commit可以理解為調用上面的某個方法
      mutations.commit('add', n)
    },
    // 調用上面的remove方法

    removeFun(mutations, n) {
      mutations.commit('remove', n)
    }
  }

getters它算是state的一個計算屬性,目前還沒怎么用過,以后補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM