Vuex3学习笔记

作者 : admin 本文共3263个字,预计阅读时间需要9分钟 发布时间: 2024-06-10 共3人阅读

文章目录

  • 1,入门案例
    • 辅助函数
  • 2,mutations传参
    • 辅助函数
  • 3,actions
    • 辅助函数
  • 4,getters
    • 辅助函数
  • 5,模块拆分
  • 6,访问子模块的state
    • 辅助函数
  • 7,访问子模块的getters
    • 辅助函数
  • 8,访问子模块的mutations
    • 辅助函数
  • 9,访问子模块的actions
    • 辅助函数

1,入门案例

安装库。

npm install vuex@3

新建store.js。

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
    state: {
        count: 0
    },
    mutations: {
        increment(state) {
            state.count++
        }
    }
})

export default store

main.js。

new Vue({
  render: h => h(App),
  store
}).$mount('#app')

最后,计数器案例。

<template>
  <h1 @click="add">{{ $store.state.count }}</h1>
</template>

<script>
export default {
  name: 'App',
  methods: {
    add() {
      this.$store.commit('increment')
    }
  }
}
</script>

效果:

Vuex3学习笔记插图

辅助函数

可以将数据自动变成计算属性。

<template>
  <h1 @click="add">{{ count }}</h1>
</template>

<script>
import { mapState } from "vuex";
export default {
  name: 'App',
  methods: {
    add() {
      this.$store.commit('increment')
    }
  },
  computed: {
    ...mapState(['count'])
  }
}
</script>

2,mutations传参

跟着后面写就行,只能传一个参数。

const store = new Vuex.Store({
    state: {
        count: 0
    },
    mutations: {
        increment(state, v) {
            state.count += v
        }
    }
})

this.$store.commit('increment', 5)

辅助函数

可以将mutations自动变成方法。

<template>
  <h1 @click="increment(5)">{{ count }}</h1>
</template>

<script>
import { mapState, mapMutations } from "vuex";
export default {
  name: 'App',
  methods: {
    ...mapMutations(['increment'])
  },
  computed: {
    ...mapState(['count'])
  }
}
</script>

3,actions

异步操作数据。

const store = new Vuex.Store({
    state: {
        count: 0
    },
    mutations: {
        increment(state, v) {
            state.count += v
        }
    },
    actions: {
        incrementAction(context, v) {
            setTimeout(() => {
                context.commit('increment', v)
            }, 1000)
        }
    }
})

this.$store.dispatch('incrementAction', 5)

辅助函数

可以将actions自动变成方法。

<template>
  <h1 @click="incrementAction(5)">{{ count }}</h1>
</template>

<script>
import { mapState, mapMutations, mapActions } from "vuex";
export default {
  name: 'App',
  methods: {
    ...mapActions(['incrementAction']),
    ...mapMutations(['increment'])
  },
  computed: {
    ...mapState(['count'])
  }
}
</script>

4,getters

派生状态,类似于计算属性。

const store = new Vuex.Store({
    state: {
        count: 0
    },
    mutations: {
        increment(state, v) {
            state.count += v
        }
    },
    actions: {
        incrementAction(context, v) {
            setTimeout(() => {
                context.commit('increment', v)
            }, 1000)
        }
    },
    getters: {
        count1(state) {
            return state.count + "个"
        }
    }
})

$store.getters.count1 

辅助函数

可以将getters自动变成计算属性。

<template>
  <h1 @click="incrementAction(5)">{{ count1 }}</h1>
</template>

<script>
import { mapState, mapMutations, mapActions, mapGetters } from "vuex";
export default {
  name: 'App',
  methods: {
    ...mapActions(['incrementAction']),
    ...mapMutations(['increment'])
  },
  computed: {
    ...mapState(['count']),
    ...mapGetters(['count1'])
  }
}
</script>

5,模块拆分

新建a.js。

新增了一个配置项namespaced。

export default {
    namespaced: true,
    state: {
        count: 0
    },
    mutations: {
        increment(state, v) {
            state.count += v
        }
    },
    actions: {
        incrementAction(context, v) {
            setTimeout(() => {
                context.commit('increment', v)
            }, 1000)
        }
    },
    getters: {
        count1(state) {
            return state.count + "个"
        }
    }
}

b.js。

export default {
    namespaced: true,
    state: {
        count: 0
    },
    mutations: {
        increment(state, v) {
            state.count += v
        }
    },
    actions: {
        incrementAction(context, v) {
            setTimeout(() => {
                context.commit('increment', v)
            }, 1000)
        }
    },
    getters: {
        count1(state) {
            return state.count + "个"
        }
    }
}

改写store.js。

const store = new Vuex.Store({
    modules: {
        a, b
    }
})

6,访问子模块的state

$store.state.a.count
$store.state.b.count

辅助函数

<template>
  <div>
    <h1>{{ count }}</h1>
  </div>
</template>

<script>
import { mapState } from "vuex";
export default {
  computed: {
    ...mapState('a', ['count'])
  }
}
</script>

7,访问子模块的getters

$store.getters['a/count1']
$store.getters['b/count1']

辅助函数

用法与前面一致。

8,访问子模块的mutations

this.$store.commit('a/increment', 1)

辅助函数

用法与前面一致。

9,访问子模块的actions

this.$store.dispatch('a/incrementAction', 1)

辅助函数

用法与前面一致。

本站无任何商业行为
个人在线分享 » Vuex3学习笔记
E-->