欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Vue中狀態(tài)管理Vuex

 更新時間:2017年05月11日 11:28:44   作者:qq_35534823  
vuex是一個專門為vue.js設計的狀態(tài)管理模式,并且也可以使用devtools進行調試。

vuex是一個專門為vue.js設計的狀態(tài)管理模式,并且也可以使用devtools進行調試。

在vuex出現(xiàn)之前,vue里面的狀態(tài)是屬于‘單向數(shù)據(jù)流'。舉個官網(wǎng)的例子:

new Vue({
  // state
  data () {
    return {
      count: 0
    }
  },
  // view
  template: `<div>{{ count }} </div`,
  // actions
  methods: {
    increment () {
      this.count++
    }
  }
})

其中

  1. state是一個數(shù)據(jù)源
  2. view以聲明的方式將state映射到視圖
  3. actions 響應在view上的用戶輸入導致的狀態(tài)變化

這里寫圖片描述

但是解決不了 多個組件共享狀態(tài)

所以vuex應運而生

這里寫圖片描述

簡單來說,就是共享的狀態(tài)用state來存放,用mutations來操作state,但是需要用store.commit來主動式的操作mutations。

下面來單獨介紹 state,getters,mutations,actions,modules

State

單一狀態(tài)樹

vuex使用單一狀態(tài)樹,那么就可以用一個對象來包含全部的應用層級狀態(tài)。所以state就作為數(shù)據(jù)源。

如何在組件中獲得vuex狀態(tài)?

由于vuex的狀態(tài)存儲是響應式的,所以從store實例中讀取狀態(tài)的最簡單方法就是使用計算屬性來返回某個狀態(tài):

這個是store/state.js中聲明的數(shù)據(jù)源

這里寫圖片描述

這個是在組件中進行的引用

這里寫圖片描述

不過需要注意的是,在組件中進行引用之前,需要先在入門文件中進行注入
即:

這里寫圖片描述

如果不在根實例中注冊store選項的話,那么需要在每一個使用state的組件中都要導入。

注冊之后,子組件只需要this.$store即可調用vuex。

Getters

有時候我們需要從state中派生出一些狀態(tài),比如篩選一組列表,并且這個篩選后的數(shù)據(jù)是有其他組件要用的。那么我們就需要把這個結果進行包裝,形成共享狀態(tài)。

例如:

computed:{
  doneTodosCount () {
    return this.$store.state.todos.filter(todo => todo.done).length
  }
}

如果說這個length是其他組件用的話,那么如何做呢?

Getter就這樣應運而生了。

getters: {
  doneTodosCount: state => {
    return state.todos.filter(todo => todo.done).length
  }
}

Getter 會暴露為store.getters對象

所以很容易在任何組件中使用它:

computed: {
  doneTodosCount () {
    return this.$store.getters.doneTodosCount
  }
}

這是getters.js

這里寫圖片描述

這是組件中的引用

這里寫圖片描述

Mutations

更改Vuex的store中的狀態(tài)的唯一方法就是提交mutations。

Vuex中的mutations就像一個事件:每個mutations都有一個字符串的事件類型(type)和一個回調函數(shù)(handler)。這個回調函數(shù)接受state作為第一個參數(shù)。

但是我們又不能直接來調用一個mutations的handler。要喚醒一個mutations handler,需要以相應的type來調用store.commit方法。

這個是在mutations.js中注冊的一些的事件

這里寫圖片描述

這是在組件中來觸發(fā)這個事件

當然,我們注意到,mutations中可以傳遞額外的參數(shù),這個參數(shù)就叫做mutations的載荷。
在更多的情況下,載荷應該是一個對象。這樣可以包含更多的字段。

但是mutations必須是同步函數(shù)。

那我們如何來異步的更新State呢?

答案是: Actions

Actions

Actions類似于 mutations 不同的是:

  1. Actions 提交的是mutations,而不是直接變更狀態(tài)。
  2. Actions 可以包含任意異步操作。

這也就形成了 actions —— mutations —— state 的過程

Actions函數(shù)接受一個與store實例具有相同方法和屬性的context對象,因此可以通過context.commit來提交一個mutations。但是如何觸發(fā)呢?

答案: store.dispatch

這里寫圖片描述

這里寫圖片描述 

這里寫圖片描述

Modules

使用單一狀態(tài)樹,導致應用的所有狀態(tài)都集中到了一個很大的對象。所以,store對象容易變得臃腫。

為了解決這個問題, Vuex允許咱們把store進行一個功能拆分,分割成不同的模塊(module)。每個模塊都擁有自己的store,mutations,action,getters。

項目結構

├── index.html
├── main.js
├── api
│  └── ... # 抽取出API請求
├── components
│  ├── App.vue
│  └── ...
└── store
  ├── index.js     # 我們組裝模塊并導出 store 的地方
  ├── actions.js    # 根級別的 action
  ├── mutations.js   # 根級別的 mutation
  └── modules
    ├── cart.js    # 購物車模塊
    └── products.js  # 產(chǎn)品模塊

總結:

vuex可以用在單頁面上的組件間共享狀態(tài)。不適合用于跨頁面的通信。

另外,對于一些跨頁面的數(shù)據(jù)或者關鍵性的數(shù)據(jù),可以通過localStorage,sessionStorage

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • vue3.0中的雙向數(shù)據(jù)綁定方法及優(yōu)缺點

    vue3.0中的雙向數(shù)據(jù)綁定方法及優(yōu)缺點

    這篇文章主要介紹了vue3.0中的雙向數(shù)據(jù)綁定方法 ,文中通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 詳解Vue單元測試Karma+Mocha學習筆記

    詳解Vue單元測試Karma+Mocha學習筆記

    本篇文章主要介紹了詳解Vue單元測試Karma+Mocha學習筆記,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • ElementUI中el-tabs事件綁定的具體使用

    ElementUI中el-tabs事件綁定的具體使用

    本文主要介紹了ElementUI中el-tabs事件綁定的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • vue中vite.config.js配置跨域以及環(huán)境配置方式

    vue中vite.config.js配置跨域以及環(huán)境配置方式

    這篇文章主要介紹了vue中vite.config.js配置跨域以及環(huán)境配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue3中關于getCurrentInstance的大坑及解決

    Vue3中關于getCurrentInstance的大坑及解決

    這篇文章主要介紹了Vue3中關于getCurrentInstance的大坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue.js移動端tab組件的封裝實踐實例

    vue.js移動端tab組件的封裝實踐實例

    本篇文章主要介紹了vue.js移動端tab的封裝實踐實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 微信小程序開發(fā)實現(xiàn)消息框彈出

    微信小程序開發(fā)實現(xiàn)消息框彈出

    在小程序的wxml文件中創(chuàng)建消息框,消息框一般包含要提示的消息內容以及確認和取消按鈕,在小程序的wxss文件中定義消息框的樣式,在小程序的js文件中,我們需要通過Animation對象實現(xiàn)消息框的彈出動畫
    2023-12-12
  • Vue3響應式高階用法之toRaw()的使用

    Vue3響應式高階用法之toRaw()的使用

    在Vue3中,toRaw方法允許用戶獲取響應式對象的原始值,有助于性能優(yōu)化和與外部庫集成,它通過繞過Vue的響應式系統(tǒng),僅在必要時觸發(fā)更新,從而提升效率,本文就來具體介紹一下,感興趣的可以了解一下
    2024-09-09
  • vue+elementui實現(xiàn)動態(tài)控制表格列的顯示和隱藏

    vue+elementui實現(xiàn)動態(tài)控制表格列的顯示和隱藏

    這篇文章主要介紹了vue+elementui實現(xiàn)動態(tài)控制表格列的顯示和隱藏,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vuex中如何getters動態(tài)獲取state的值

    Vuex中如何getters動態(tài)獲取state的值

    這篇文章主要介紹了Vuex中如何getters動態(tài)獲取state的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論