摘要:是什么是一個(gè)針對(duì)開(kāi)發(fā)的狀態(tài)管理模式。說(shuō)簡(jiǎn)單點(diǎn)兒就是一個(gè)工具,可以管理修改或設(shè)置所有組件用到的數(shù)據(jù),而不需要借助之前的或者在組件間傳值。
Vuex是什么
Vuex是一個(gè)針對(duì)Vue.js開(kāi)發(fā)的狀態(tài)管理模式。說(shuō)簡(jiǎn)單點(diǎn)兒就是一個(gè)工具,可以管理(修改或設(shè)置)所有組件用到的數(shù)據(jù),而不需要借助之前的event bus或者props在組件間傳值。
Vuex使用場(chǎng)景
大型單頁(yè)應(yīng)用程序,存在多組件共享數(shù)據(jù)的時(shí)候,需要用到
Vuex 核心內(nèi)容
(一個(gè)容器對(duì)象,存儲(chǔ)Vuex中的state,mutations,actions,getters等)
state (一個(gè)保存數(shù)據(jù)的對(duì)象,對(duì)象中的數(shù)據(jù)可以供所有組件使用)
// 1. 定義
const state = {
count: 0
}
// 2. 獲取state中的值
this.$store.state.count
// mapState 輔助函數(shù)獲取多個(gè)state的值
import { mapState } from "vuex"
computed: mapState({
// 箭頭函數(shù)可使代碼更簡(jiǎn)練 count: state => state.count, // 傳字符串參數(shù) "count" 等同于 `state => state.count` countAlias: "count",
})
computed: mapState([
// 映射 this.count 為 store.state.count
"count"
])
// 3. 與組件的計(jì)算屬性混合使用
computed: {
localComputed () { / ... / },
// 使用對(duì)象展開(kāi)運(yùn)算符將此對(duì)象混入到外部對(duì)象中
...mapState({
// ...
})
}
(一個(gè)對(duì)象,保存的是更改state的函數(shù),也只有它能更改state中的值,觸發(fā)方式this.$store.commit("函數(shù)名",參數(shù)))
// 1. 定義 const mutations = { increment (state) { state.count++ } } // 2. 觸發(fā) this.$store.commit("increment") // 3. 傳遞參數(shù),通常參數(shù)應(yīng)該是一個(gè)對(duì)象 mutations: { increment (state, n) { state.count += n } } this.$store.commit("increment", 10) // 4. 在組件的方法中使用 methods: { ...mapMutations([ "increment", // 將 `this.increment()` 映射為 `this.$store.commit("increment")` // `mapMutations` 也支持載荷: "incrementBy" // 將 `this.incrementBy(amount)` 映射為 `this.$store.commit("incrementBy", amount)` ]), ...mapMutations({ add: "increment" // 將 `this.add()` 映射為 `this.$store.commit("increment")` }) }actions
(一個(gè)對(duì)象,保存的是觸發(fā)mutations的函數(shù),讓mutations去修改state中的值)
// 1. 定義 const actions = { increment: ({ commit }) => commit("increment") } // 2. 觸發(fā) this.$store.dispatch("increment") // 3. 參數(shù)支持 this.$store.dispatch("incrementAsync", { amount: 10 }) // 4. 組件的方法中使用 methods: { ...mapActions([ "increment", // 將 `this.increment()` 映射為 `this.$store.dispatch("increment")` // `mapActions` 也支持載荷: "incrementBy" // 將 `this.incrementBy(amount)` 映射為 `this.$store.dispatch("incrementBy", amount)` ]), ...mapActions({ add: "increment" // 將 `this.add()` 映射為 `this.$store.dispatch("increment")` }) }getters
(一個(gè)對(duì)象,保存的是一些類似與計(jì)算屬性的函數(shù),可以通過(guò)他們得到任何依賴于state的新的數(shù)據(jù))
// 1. 定義 const getters = { evenOrOdd: state => state.count % 2 === 0 ? "even" : "odd" } // 2. 使用 this.$store.getters.evenOrOdd // 3. 使用其他getters作為參數(shù) getters: { // ... doneTodosCount: (state, getters) => { return getters.doneTodos.length } } // 4. 組件內(nèi)使用 export default { // ... computed: { // 使用對(duì)象展開(kāi)運(yùn)算符將 getter 混入 computed 對(duì)象中 ...mapGetters([ "doneTodosCount", "anotherGetter", // ... ]) } }使用vuex
npm install vuex -S
// store.js import Vue from "vue" import Vuex from "vuex" Vue.use(Vuex) const state = {} const mutations = {} const actions = {} const getters = {} export default new Vuex.Store({ state, getters, actions, mutations }) // app.js import store from "./store" new Vue({ el: "#app", store, render: h => h(Counter) })
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104214.html
摘要:而鉆研最好的方式,就是閱讀的源代碼。整個(gè)的源代碼,核心內(nèi)容包括兩部分。逃而動(dòng)手腳的代碼,就存在于源代碼的中。整個(gè)源代碼讀下來(lái)一遍,雖然有些部分不太理解,但是對(duì)和一些代碼的使用的理解又加深了一步。 筆記中的Vue與Vuex版本為1.0.21和0.6.2,需要閱讀者有使用Vue,Vuex,ES6的經(jīng)驗(yàn)。 起因 俗話說(shuō)得好,沒(méi)有無(wú)緣無(wú)故的愛(ài),也沒(méi)有無(wú)緣無(wú)故的恨,更不會(huì)無(wú)緣無(wú)故的去閱讀別人的源...
摘要:我們通常稱之為狀態(tài)管理模式,用于解決組件間通信的以及多組件共享狀態(tài)等問(wèn)題。創(chuàng)建指定命名空間的輔助函數(shù),總結(jié)的功能首先分為兩大類自己的實(shí)例使用為組件中使用便利而提供的輔助函數(shù)自己內(nèi)部對(duì)數(shù)據(jù)狀態(tài)有兩種功能修改數(shù)據(jù)狀態(tài)異步同步。 what is Vuex ? 這句話我想每個(gè)搜索過(guò)Vuex官網(wǎng)文檔的人都看到過(guò), 在學(xué)習(xí)源碼前,當(dāng)然要有一些前提條件了。 了解Vuex的作用,以及他的使用場(chǎng)景。 ...
摘要:說(shuō)實(shí)在話,我在閱讀文檔的時(shí)候,也很難以去理解,甚至覺(jué)得沒(méi)有使用它我也可以。介紹那么到底是什么引用官網(wǎng)的說(shuō)法就是是一個(gè)專為應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。 前言 先說(shuō)句前話,如果不是接觸大型項(xiàng)目,不需要有多個(gè)子頁(yè)面,不使用vuex也是完全可以的。 說(shuō)實(shí)在話,我在閱讀vuex文檔的時(shí)候,也很難以去理解v...
摘要:說(shuō)實(shí)在話,我在閱讀文檔的時(shí)候,也很難以去理解,甚至覺(jué)得沒(méi)有使用它我也可以。介紹那么到底是什么引用官網(wǎng)的說(shuō)法就是是一個(gè)專為應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。 前言 先說(shuō)句前話,如果不是接觸大型項(xiàng)目,不需要有多個(gè)子頁(yè)面,不使用vuex也是完全可以的。 說(shuō)實(shí)在話,我在閱讀vuex文檔的時(shí)候,也很難以去理解v...
摘要:說(shuō)實(shí)在話,我在閱讀文檔的時(shí)候,也很難以去理解,甚至覺(jué)得沒(méi)有使用它我也可以。介紹那么到底是什么引用官網(wǎng)的說(shuō)法就是是一個(gè)專為應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。 前言 先說(shuō)句前話,如果不是接觸大型項(xiàng)目,不需要有多個(gè)子頁(yè)面,不使用vuex也是完全可以的。 說(shuō)實(shí)在話,我在閱讀vuex文檔的時(shí)候,也很難以去理解v...
摘要:使用,引入之后用進(jìn)行引用。在模板中引入們剛建的文件,并在模板中用輸出的值。在文件中加入兩個(gè)改變的方法。和單純的全局對(duì)象有以下兩點(diǎn)不同的狀態(tài)存儲(chǔ)是響應(yīng)式的。改變中的狀態(tài)的唯一途徑就是顯式地提交。 vuex 是什么? Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。通俗的解釋就是,Vuex 就是為 vue 組件之間進(jìn)行數(shù)據(jù)共享而開(kāi)發(fā)的插件。 vuex 什么時(shí)候用? 實(shí)現(xiàn)數(shù)據(jù)...
閱讀 3229·2023-04-25 18:43
閱讀 910·2021-11-24 09:39
閱讀 1373·2021-10-14 09:43
閱讀 3906·2021-09-22 15:58
閱讀 1944·2019-08-29 17:18
閱讀 431·2019-08-29 14:14
閱讀 3090·2019-08-29 13:01
閱讀 1629·2019-08-29 12:33