1. 程式人生 > >Vue中狀態管理——Vuex

Vue中狀態管理——Vuex

vuex是一個專門為vue.js設計的狀態管理模式,並且也可以使用devtools進行除錯。

在vuex出現之前,vue裡面的狀態是屬於‘單向資料流’。舉個官網的例子:

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

其中

  • state是一個數據源
  • view以宣告的方式將state對映到檢視
  • actions 響應在view上的使用者輸入導致的狀態變化
    這裡寫圖片描述

但是解決不了 多個元件共享狀態

所以vuex應運而生

這裡寫圖片描述

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

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

State

單一狀態樹
vuex使用單一狀態樹,那麼就可以用一個物件來包含全部的應用層級狀態。所以state就作為資料來源。
如何在元件中獲得vuex狀態?


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

這個是store/state.js中宣告的資料來源
這裡寫圖片描述

這個是在元件中進行的引用
這裡寫圖片描述

不過需要注意的是,在元件中進行引用之前,需要先在入門檔案中進行注入
即:
這裡寫圖片描述

如果不在根例項中註冊store選項的話,那麼需要在每一個使用state的元件中都要匯入。

註冊之後,子元件只需要this.$store即可呼叫vuex。

Getters

有時候我們需要從state中派生出一些狀態,比如篩選一組列表,並且這個篩選後的資料是有其他元件要用的。那麼我們就需要把這個結果進行包裝,形成共享狀態。
例如:

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中的狀態的唯一方法就是提交mutations。
Vuex中的mutations就像一個事件:每個mutations都有一個字串的事件型別(type)和一個回撥函式(handler)。這個回撥函式接受state作為第一個引數。

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

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

這裡寫圖片描述

這是在元件中來觸發這個事件

當然,我們注意到,mutations中可以傳遞額外的引數,這個引數就叫做mutations的載荷。
在更多的情況下,載荷應該是一個物件。這樣可以包含更多的欄位。

但是mutations必須是同步函式。

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

答案是: Actions

Actions

Actions類似於 mutations 不同的是:

  • Actions 提交的是mutations,而不是直接變更狀態。
  • Actions 可以包含任意非同步操作。

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

Actions函式接受一個與store例項具有相同方法和屬性的context物件,因此可以通過context.commit來提交一個mutations。但是如何觸發呢?

答案: store.dispatch

這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述

Modules

使用單一狀態樹,導致應用的所有狀態都集中到了一個很大的物件。所以,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   # 產品模組

總結:

vuex可以用在單頁面上的元件間共享狀態。不適合用於跨頁面的通訊。
另外,對於一些跨頁面的資料或者關鍵性的資料,可以通過localStorage,sessionStorage

相關推薦

Vue狀態管理——Vuex

vuex是一個專門為vue.js設計的狀態管理模式,並且也可以使用devtools進行除錯。 在vuex出現之前,vue裡面的狀態是屬於‘單向資料流’。舉個官網的例子: new Vue({ // state data () {

Vue狀態管理 vuex 學習

Vuex 介紹 Vuex 是一個專為 Vue.js 應用程式開發的 狀態管理模式。 它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。 舉一個很常見的例子:子元件呼叫父元件一般通過event 來完成,比如 this

vue狀態管理vuex使用之專案如何合理引入vuex

在前端開發過程中,狀態的管理是一件很令人頭疼的事情。尤其是在專案中,涉及同一狀態的元件越多,在元件狀態管理上,通過父子元件之間通訊來更新狀態將變的複雜。Vue專案開發過程中,藉助vuex進行狀態管理將極大的減輕我們在開發過程中對於元件狀態的維護。 vuex: vuex 是一個專為 Vue.j

vue.js的狀態管理vuexstore的使用

一、狀態管理(vuex)簡介        vuex是專為vue.js應用程式開發的狀態管理模式。它採用集中儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。vuex也整合刀vue的官方除錯工具devtools extension,提供了諸如零配

理解Vue狀態管理模式Vuex

pan 是把 存儲管理 route 並不會 怎麽 什麽事 新的 comment   Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。   狀態管理模式、集中式存儲管理

Vue狀態管理器:Vuex

歡迎大家訪問我的個人網站 - Sunday俱樂部 這一章我們來學習Vuex,如果要學習好Vuex那麼最最重要的就是要知道Vuex是幹嘛的,我們為什麼需要Vuex。因為對於Vuex來說,它的使用方式非常簡單,知識點也不多。Vuex唯一的難點就是很多人無法理解它。所以在本章我們會著

Vue.js狀態管理模式 Vuex

vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。 安裝、使用 vuex 首先我們在 vue.js 2.0 開發環境中安裝 vuex : npm insta

理解vuex -- vue狀態管理模式

vuex是什麼? 先引用vuex官網的話: Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。 狀態管理模式、集中式儲存管理 一聽就很高大上,蠻嚇人的。在我看來 

Vue.js(六)全域性狀態管理(Vuex)

一:Vuex是什麼 1.1 簡介 元件中包含檢視(模板template)、雙向繫結的資料(data)、以及一些方法(methods),這3個都寫在同一個元件(component)裡面, 一般檢視(View)觸發方法動作(Actions),動作影響資料狀態(State), 資料狀態

vue狀態管理vuex從淺入深詳細講解

1、vuex簡介以及建立一個簡單的倉庫 vuex是專門為vue框架而設計出的一個公共資料管理框架,任何元件都可以通過狀態管理倉庫資料溝通,也可以統一從倉庫獲取資料,在比較大型的應用中,資料互動龐大的情況下,推薦使用vuex管理。Vuex狀態管理有五個核心的概念,分別為state、getters、actions

狀態管理(Vuex、 Flux、Redux、The Elm Architecture)

htm Redux 設計 細粒度 vuex 管理 http flux red 1、https://vuex.vuejs.org/zh-cn/intro.html (vuex) 這就是 Vuex 背後的基本思想,借鑒了 Flux、Redux、和 The Elm Archite

Vue.js 狀態管理

狀態管理 類 Flux 狀態管理的官方實現 由於狀態零散地分佈在許多元件和元件之間的互動中,大型應用複雜度也經常逐漸增長。為了解決這個問題,Vue 提供 vuex:我們有受到 Elm 啟發的狀態管理庫。vuex 甚至整合到 vue-devtools,無需配置即可進行時光旅

Vue我們使用vuex的目的及使用方法

首先我們來說說,使用vuex的場景。假設有這樣的兩個頁面,資料一樣,就是頁面佈局不一樣。同一份資料,我們在兩個頁面裡面操作兩次感覺還行,如果有10個,20個 ……頁面需要這樣,那麼這就是一個讓人奔潰的事情,而且資料的同步重新整理也很痛苦。所以就需要Vuex了。雖然 Vuex

Vuex內容解析和vue cli項目使用狀態管理模式Vuex

ces timeout AD 所有 vue ... 介紹 -- 組裝   中文文檔:vuex官方中文網站 一、vuex裏面都有些什麽內容? const store = new Vuex.Store({ state: { name: ‘weish‘,

vuevuex狀態管理

Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式,用來儲存共享的資料以及相關的狀態資料變化的操作。 每一個 Vuex 應用的核心就是 store(倉庫)。“store”基本上就是一個容器,它包含著你的應用中大部分的狀態 (state)。 store檔案中各個

vue-cli搭建的專案使用vuex實現狀態管理

1、安裝 使用vue-cli搭建好專案以後,安裝vuex npm install vuex --save-dev 2、建立Vuex.Store例項 對於大型應用,需要儲存的狀態可能很多,我們就將store中的state、getters 、mutations 和 a

vue.jsvuex狀態管理的實現與模組化

本文采用的前端元件為ElementUI,所以需要在使用vuecli搭建前端工程,後繼續安裝npm install element-ui,並在main.js中引入 main.js程式碼: import Element from 'element-ui'; im

Vuex ~ 專門為vue.js設計的集中式狀態管理架構

state 原來 管理工具 t對象 包管理工具 emp UC maps fault 狀態:data中的屬性需要共享給其他vue組件使用的部分(即data中需要共用的屬性) 1、初識vuex直接來個小demo   下面操作都是基於vue-cli,如果不了解先學習下vue-

Vue使用vuex在頁面重新整理之後狀態不丟失的解決方法

const store = new Vuex.Store({ // 定義狀態             myInfo: JSON.parse(localStorage.getItem("myInfo")) || {}, //這裡

簡述vue狀態管理模式之vuex

瞭解vuex核心概念請移步 https://vuex.vuejs.org/zh/ 一、初始vuex 1.1 vuex是什麼 那麼先來看看這兩個問題: 什麼是vuex?官網說:Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。 按個人通俗理解來說就是:vuex就是用來管理各個元件之間的一些狀態,可