Vue.js狀態管理模式Vuex的安裝與使用(程式碼範例)
這篇文章帶給大家的內容是關於Vue.js狀態管理模式Vuex的安裝與使用(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
安裝、使用vuex
首先我們在vue.js 2.0 開發環境中安裝vuex :
npm install vuex --save
然後, 在main.js 中加入:
import vuex from 'vuex' Vue.use(vuex); const store = new vuex.Store({//store对象 state:{ show:false, count:0 } })
再然後, 在實例化Vue物件時加入store 物件:
new Vue({ el: '#app', router, store,//使用store template: '<app></app>', components: { App } })
現在,你可以透過store.state 來取得狀態對象,以及透過store.commit 方法觸發狀態變更:
store.commit('increment') console.log(store.state.count) // -> 1
State
在Vue 元件中獲得Vuex 狀態
從store 實例中讀取狀態最簡單的方法就是在計算屬性中傳回某個狀態:
// 创建一个 Counter 组件 const Counter = { template: `<p>{{ count }}</p>`, computed: { count () { return this.$store.state.count } } }
mapState 輔助函數
當一個元件需要取得多個狀態時候,將這些狀態都宣告為計算屬性會有些重複和冗餘。為了解決這個問題,我們可以使用mapState 輔助函數來幫助我們產生計算屬性:
// 在单独构建的版本中辅助函数为 Vuex.mapState import { mapState } from 'vuex' export default { // ... computed: mapState({ // 箭头函数可使代码更简练 count: state => state.count, // 传字符串参数 'count' 等同于 `state => state.count` countAlias: 'count', // 为了能够使用 `this` 获取局部状态,必须使用常规函数 countPlusLocalState (state) { return state.count + this.localCount } }) }
當映射的計算屬性的名稱與state 的子節點名稱相同時,我們也可以給mapState 傳一個字串數組:
computed: mapState([ // 映射 this.count 为 store.state.count 'count' ])
Getter
getters 和vue 中的computed 類似, 都是用來計算state 然後產生新的資料( 狀態) 的,就像計算屬性一樣,getter 的回傳值會根據它的依賴被緩存起來,並且只有當它的依賴值發生了改變才會被重新計算。
Getter 接受state 作為其第一個參數:
const store = new Vuex.Store({ state: { todos: [ { id: 1, text: '...', done: true }, { id: 2, text: '...', done: false } ] }, getters: { doneTodos: state => { return state.todos.filter(todo => todo.done) } } })
透過屬性存取
Getter 會暴露為store.getters 對象,你可以以屬性的形式存取這些值:
store.getters.doneTodos // -> [{ id: 1, text: '...', done: true }]
Getter 也可以接受其他getter 作為第二個參數:
getters: { // ... doneTodosCount: (state, getters) => { return getters.doneTodos.length } } store.getters.doneTodosCount // -> 1
元件中使用:
computed: { doneTodosCount () { return this.$store.getters.doneTodosCount } }
注意,getter 在透過屬性存取時是作為Vue 的響應式系統的一部分快取其中的。
透過方法存取
透過方法存取
你也可以讓 getter 回傳一個函數,來實作給 getter 傳參。在你對 store 裡的陣列進行查詢時非常有用:
getters: { // ... getTodoById: (state) => (id) => { return state.todos.find(todo => todo.id === id) } }
store.getters.getTodoById(2) // -> { id: 2, text: '...', done: false }
注意,getter 在透過方法存取時,每次都會去進行調用,而不會快取結果。
mapGetters 輔助函數
mapGetters 輔助函數只是將store 中的getter 對應到局部計算屬性:
import { mapGetters } from 'vuex' export default { // ... computed: { // 使用对象展开运算符将 getter 混入 computed 对象中 ...mapGetters([ 'doneTodosCount', 'anotherGetter', // ... ]) } }
如果你想將一個getter 屬性另取一個名字,使用物件形式:
mapGetters({ // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount` doneCount: 'doneTodosCount' })
Mutation
更改Vuex 的store 中的狀態的唯一方法是提交mutation。
註冊:
const store = new Vuex.Store({ state: { count: 1 }, mutations: { increment (state) { // 变更状态 state.count++ } } })
呼叫:
store.commit('increment')
提交負載(Payload)
你可以向store.commit 傳入額外的參數,即mutation 的載重(payload):
// ... mutations: { increment (state, n) { state.count += n } }
store.commit('increment', 10)
如果提交多個參數,必須使用物件的形式進行提交
// ... mutations: { increment (state, payload) { state.count += payload.amount } }
store.commit('increment', { amount: 10 })
註:mutations裡的操作必須是同步的;
Action
Action 類似mutation,不同在於:
Action 提交的是mutation,而不是直接變更狀態。
Action 可以包含任意非同步操作。
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } }, actions: { increment (context) { context.commit('increment') } } })
Action 透過store.dispatch 方法觸發:
store.dispatch('increment')
在action 內部執行非同步操作:
actions: { incrementAsync ({ commit }) { setTimeout(() => { commit('increment') }, 1000) } }
物件形式傳參:
// 以载荷形式分发 store.dispatch('incrementAsync', { amount: 10 })
相關推薦:
以上是Vue.js狀態管理模式Vuex的安裝與使用(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
