vuex其實超簡單,只需3步

noahlam發表於2018-05-18

前言

之前幾個專案中,都多多少少碰到一些元件之間需要通訊的地方,而因為種種原因, event bus 的成本反而比vuex還高, 所以技術選型上選用了 vuex, 但是不知道為什麼, 團隊裡的一些新人一聽到vuex,就開始退縮了, 因為vuex 很難? 真的很難嗎? 今天我們用簡單的3步來證明一下,vuex有多簡單.

純屬個人經驗,難免有不正確的地方,如有發現,歡迎指正!

這是一個針對新手的入門級教程、入門級教程、入門級教程

第零步

新建一個vue專案,安裝vuex,這裡不做過多介紹,能點進來的,預設你具備這些技能 ^_^

第一步

新建一個.js 檔案,名字位置任意,按照慣例,建議在/src/store 目錄下(沒有的話自己新建一個唄)

檔案位置 /src/store/index.js

// 引入vue 和 vuex
import Vue from 'vue'
import Vuex from 'vuex'

// 這裡需要use一下,固定寫法,記住即可
Vue.use(Vuex)

// 直接匯出 一個 Store 的例項
export default new Vuex.Store({
  // 類似 vue 的 data
  state: {
    name: 'oldName'
  },
  // 類似 vue 裡的 mothods(同步方法)
  mutations: {
    updateName (state) {
      state.name = 'newName'
    }
  }
})
複製程式碼

程式碼看起來稍微有那麼一點點多,不過看起來是不是很熟悉? 跟普通的 vue 沒多大差別嘛. 這一步其實就是新建一個store,但是我們還沒在專案中使用.

第二步

在入口檔案引入上述檔案, 並稍微改一下傳給 new Vue()的引數,新增的行後面有備註

檔案位置 /src/main.js (vue-cli自動生成的入口,如果你能不用腳手架,那麼也就不需要我說明了)

import Vue from 'vue'
import App from './App'
import vuexStore from './store'   // 新增

new Vue({
  el: '#app',
  store:vuexStore                 // 新增
  components: { App },
  template: '<App/>'
})
複製程式碼

Tip: import store from './store' 後面的地址,就是上面我們新建那個檔案的位置(/src/store/index.js), 因為我這裡是index.js,所以可以省略.

第三步

以上2步,其實已經完成了vuex的基本配置,接下來就是使用了

檔案位置 /src/main.js (同樣是vue-cli生成的app.vue,這裡為了方便演示,我去掉多餘的程式碼)

<template>
  <div>
    {{getName}}
    <button @click="changeName" value="更名">更名</button>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld'

export default {
  computed:{
    getName(){
      return this.$store.state.name
    }
  },
  methods:{
    changeName () {
      this.$store.commit('updateName')
    }
  }
}
</script>
複製程式碼

這裡就是一個很普通的vue檔案了,有區別的地方是這裡我們需要用computed屬性去獲取 store 裡的 "data"

還有就是我們要改變資料的話,不再用 this.xxx = xxx 改成 this.$store.commit('updateName')

總結

你可能會覺得,上例這樣做的意義何在,為何不直接用vue的data跟methods?

上例只是為了簡單講解如何使用vuex,所以簡化了一些流程,試想一下,如果你有這樣一個頁面: 一共巢狀了10層元件(即子元件裡面還有子子元件,子子元件下面還有子子子元件,以此類推10層) 然後最後一層元件一個資料改變了,要通知第一層元件的時候,我們只需在最底層元件裡this.$store.commit(), 然後再最外層元件上用computed屬性獲取對應的值,就能做到實時更新.無需層層$emit上去.

最後

本來想在最後再擴充套件一下getter,action+dispatch,模組化等等,不過為了對得起這個標題, 只好放在 下一篇:vuex其實超簡單,喝完這3步,還有3步

如果覺得本文對您有用,請給本文的github加個star,萬分感謝

另外,github上還有其他一些關於前端的教程和元件,有興趣的童鞋可以看看,你們的支援就是我最大的動力。

相關文章