摘要:管理統一組件狀態。映射到組件將映射為也支持載荷將映射為將映射為概念允許我們將分割成模塊。每個模塊擁有自己的類似里面的針對每個組件對應的狀態做處理的狀態的狀態對于模塊內部的,局部狀態通過暴露出來,根節點狀態則為。
1.首先明白vuex是做什么用的。
管理統一組件狀態state。每個應用將僅僅包含一個 store 實例。單一狀態樹讓我們能夠直接地定位任一特定的狀態片段,在調試的過程中也能輕易地取得整個當前應用狀態的快照。2.如何實現 vuex有幾個對象
state =>mapState
getters =>mapGetters
actions =>mapActions
mutations => mapMutations
moudle
3.state (注入store)Vuex 通過 store 選項,提供了一種機制將狀態從根組件“注入”到每一個子組件中(需調用 Vue.use(Vuex)):
const app = new Vue({ el: "#app", // 把 store 對象提供給 “store” 選項,這可以把 store 的實例注入所有的子組件 store, components: { Counter }, template: `` })
通過在根實例中注冊 store 選項,該 store 實例會注入到根組件下的所有子組件中,且子組件能通過 this.$store 訪問到。
當我們需要時刻跟蹤狀態值的變化時,可以通過組件的計算機屬性來確定,然后使用mapState.方法來映射。
computed: { localComputed () { /* ... */ }, // 使用對象展開運算符將此對象混入到外部對象中 ...mapState({ // ... }) }4.getters (都是方法)
Vuex 允許我們在 store 中定義“getter”(可以認為是 store 的計算屬性)。就像計算屬性一樣,getter 的返回值會根據它的依賴被緩存起來,且只有當它的依賴值發生了改變才會被重新計算。
Getter 接受 state 作為第一個參數
mapGetters 輔助函數僅僅是將 store 中的 getter
import { mapGetters } from "vuex" export default { computed: { // 使用對象展開運算符將 getter 混入 computed 對象中 ...mapGetters([ "doneTodosCount", "anotherGetter", // ... ]) } }5. mutation
更改 Vuex 的 store 中的狀態的唯一方法是提交 mutation,調用方法store.commit("increment")
注意點
使用常量替代 Mutation 事件類型
export const SOME_MUTATION = "SOME_MUTATION" // store.js import Vuex from "vuex" import { SOME_MUTATION } from "./mutation-types" const store = new Vuex.Store({ state: { ... }, mutations: { // 我們可以使用 ES2015 風格的計算屬性命名功能來使用一個常量作為函數名 [SOME_MUTATION] (state) { // mutate state } } })
Mutation 必須是同步函數
mapMutations
import { mapMutations } from "vuex" export default { // ... 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")` }) } }6.Action
Action 提交的是 mutation,而不是直接變更狀態。
Action 可以包含任意異步操作。
context 不是 store 實例本身
Action 函數接受一個與 store 實例具有相同方法和屬性的 context 對象,因此你可以調用 context.commit 提交一個 mutation,或者通過 context.state 和 context.getters 來獲取 state 和 getters。
actions: { increment ({ commit }) { commit("increment") } }
mapActions 映射到組件
import { mapActions } from "vuex" export default { // ... 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")` }) } }7. Module
概念
Vuex 允許我們將 store 分割成模塊(module)。每個模塊擁有自己的 state、mutation、action、getter.類似redux里面的reducer 針對每個組件對應的state狀態做處理
const moduleA = { state: { ... }, mutations: { ... }, actions: { ... }, getters: { ... } } const moduleB = { state: { ... }, mutations: { ... }, actions: { ... } } const store = new Vuex.Store({ modules: { a: moduleA, b: moduleB } }) store.state.a // -> moduleA 的狀態 store.state.b // -> moduleB 的狀態
rootState
對于模塊內部的 action,局部狀態通過 context.state 暴露出來,根節點狀態則為 context.rootState。
rootState 可以獲取到所有mudule里面的state值
const moduleA = { // ... actions: { incrementIfOddOnRootSum ({ state, commit, rootState }) { if ((state.count + rootState.count) % 2 === 1) { commit("increment") } } } }
這個還是要多看官方的demo
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93929.html
摘要:配置配置使用概率抽樣。采樣率定義了對跟蹤跨度進行采樣的概率,其值可以介于和含之間。例如,以下配置對象將采樣率更改為即每個跨度都被采樣,并使用協議將跟蹤發送到位于的服務器文件路徑注將采樣率更改為會完全禁用跟蹤。目錄手把手教你學Dapr - 1. .Net開發者的大時代手把手教你學Dapr - 2. 必須知道的概念手把手教你學Dapr - 3. 使用Dapr運行第一個.Net程序手把手教你學Da...
摘要:組件聲明組件分為全局的和局部的。父組件通過給子組件下發數據,子組件通過事件給父組件發送消息。以下實例中子組件已經和它外部完全解耦了。 1.vue 組件-聲明 組件分為全局的和局部的。 全局聲明 Vue.component(tagName, options) ** 引用組件 // 注冊 Vue.comp...
摘要:組件聲明組件分為全局的和局部的。父組件通過給子組件下發數據,子組件通過事件給父組件發送消息。以下實例中子組件已經和它外部完全解耦了。 1.vue 組件-聲明 組件分為全局的和局部的。 全局聲明 Vue.component(tagName, options) ** 引用組件 // 注冊 Vue.comp...
閱讀 3316·2023-04-25 19:42
閱讀 1334·2021-11-23 10:11
閱讀 2271·2021-11-16 11:51
閱讀 1596·2019-08-30 15:54
閱讀 2040·2019-08-29 18:44
閱讀 1619·2019-08-23 18:24
閱讀 496·2019-08-23 17:52
閱讀 1770·2019-08-23 15:33