vue-loader/vue-cli/vuex


vue-loader:

webpack 提供的支持vue的一個預編譯器,通過它可以編譯 sfc格式專業的VUE組件。

1、安裝vue-loader

npm install -D vue-loader vue-template-compiler

2、配置webpack(注意的是除了配置規則外還需要引入loader插件)

// webpack.config.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
  module: {
    rules: [
      // ... 其它規則
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      }
    ]
  },
  plugins: [
    // 請確保引入這個插件!
    new VueLoaderPlugin()
  ]
}

 

 

vue-cli:vue項目搭建命令行工具,包括cli 、cli service 、cli 插件,關於具體的說明個人也沒有看完,只是單純做個了解,需要使用vue-cli 構建項目的小伙伴請看官網文檔https://cli.vuejs.org/zh/guide/browser-compatibility.html#usebuiltins-usage

1、安裝

npm install -g @vue/cli
# OR
yarn global add @vue/cli

 2、創建項目

vue create hello-world

圖形化創建

 

 

 vuex:學習vuex 目前主要是因為uni-app 中提到了它,並且在某些情境性下用來管理狀態非常實用。

注冊狀態

 

Vuex 選項:

1、state :單一狀態樹

響應式狀態,使用vue的計算屬性獲取狀態

根注入:

 

 

 輔助函數:獲取多個狀態,mapState,綁定data,名稱相同的情況下使用字符串數組。

其返回的是一個對象,在與計算屬性合並的時候,直接通過擴展運算符展開即可。

 

 2、Getter

相當於對states的計算。

通過getters 訪問:

 

 mapGetters:輔助函數

類似states,一次性獲取多個getter(它只是映射給局部屬性)

 

 3、Mutation:提交mutation 更改狀態

const store = new Vuex.Store({
  state: {
    count: 1
  },
  mutations: {
    increment (state) {
      // 變更狀態
      state.count++
    }
  }
})

 

 事件調用:

store.commit('increment')

傳參:

store.commit('increment', 10)
mutations: {
  increment (state, n) {
    state.count += n
  }
}

第二種調用范式:對象參數,必須包涵type 屬性(個人覺得用第一種就可以了)

 

 添加新屬性:(最好不要添加,在初始化的時候就定義好所有屬性)

Vue.set(obj, 'newProp', 123)

 

 另外官網說明mutaion 必須是同步函數,因為不可追蹤,因為每一條 mutation 被記錄,devtools 都需要捕捉到前一狀態和后一狀態的快照

 

mapMutations:輔助函數,可以定義在methods中進行使用。

 

 

 4、Action : 這個就有意思了,官方說明。

區別時它可以提交mutaion,而且可以包涵異步操作,它接收與store實例相同方法和屬性的上下文對象,也就是說可以隨意訪問store中的東西~

actions: {
    increment (context) {
      context.commit('increment')
    }
  }

官方舉例:購物車

 

 組件中調用:dispatch、或者使用賦值函數 mapActions

 

 

 Action 返回一個promise ,所以我們可以監聽到事件的處理步驟,或者說什么時候結束。(關於promise ,可以參考《你不知道的JavaScript(中)》或者看阮一峰的es6 promise章節)

 

 

這里還是提及一下,上面的實例中action 方法第一個參數如{commit,state}是es6提供的對象解構賦值功能,如果你還沒了解的話,去看一下教程,阮一峰大神那也有。

 

5.module:模塊

由於使用單一狀態樹,應用的所有狀態會集中到一個比較大的對象。當應用變得非常復雜時,store 對象就有可能變得相當臃腫。

為了解決以上問題,Vuex 允許我們將 store 分割成模塊(module)。每個模塊擁有自己的 state、mutation、action、getter、甚至是嵌套子模塊——從上至下進行同樣方式的分割

使用module后,在action 和 getters 的方法中獲取根節點狀態 rootState

 

訪問全局內容:使用Action調用dispatch的時候使用root action需要添加一個參數對象{root:true}

在module中定義全局Action,除了添加參數並且把實際函數內容丟到handler 中。

 

關於訪問module中的屬性和方法,除了通過命名空間外還可以通過傳參的方式綁定某個module

 

 

 模塊動態注冊:這個不看了,實際用的情況不多或者基本為不用,感興趣的自己去看看吧。

 

 

模塊重用,使用函數式聲明:

const MyReusableModule = {
  state () {
    return {
      foo: 'bar'
    }
  },
  // mutation, action 和 getter 等等...
}

 

對於store 的項目結構,官方推薦如果有多個store ,建立store目錄集中管理。

 

 擴展:插件

可以自定義插件,對store進行擴展,它接受store作為唯一的參數,每次mutation調用時都用進行調用,這是一個鈎子~

 

 關鍵函數(訂閱):

store.subscribe(mutation => {
      if (mutation.type === 'UPDATE_DATA') {
        socket.emit('update', mutation.payload)
      }
    })

 

state快照(關於比對前后狀態的用處,在react 官網的入門教程中的例子非常形象,如果感興趣可以去看看,看完之后對狀態前后對比會有一定的認知),此處使用lodash庫,關於它的用法可以官網查看,非常實用(_.cloneDeep);

 

 關於嚴格模式,官網中提及,故不用唄,並且在表單處理中對v-model 指令也會有一定的影響。

 

 

關於測試,有很多第三方測試模塊可以使用,另外關於熱重載,使用webpack 提供的dev-server 即可且方便又實用。

 

 

這篇文章主要是因為在學習uni-app 中遇到了vuex的知識點,故學習vuex的知識更深度的api等信息,此處不表(我也沒看)

 


免責聲明!

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



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