vuex
1.state
在store中定义数据,在组件中直接使用
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex)
export default new Vuex.Store({
state:{},
getters:{},
mutations:{},
actions:{},
modules:{}
})
目录:home.vue
<template> <div> home{{$store.state.num}} </div> </template> <script> export default { } </script> <style scoped> </style>
目录:about.vue
<template> <div> about{{num}} </div> </template> <script> export default { computed:{ num(){ return this.$store.state.num } } } </script> <style scoped> </style>
2.getters
将组件中统一使用的 computed都放getters里面来操作
export default new Vuex.Store({
// state相当于组件中的data,专门用来存放全局的数据
state:{
num:0
},
// getters相当于组件中的computed,getters是全局的,computed是组件内部使用的
getters:{
num(state){
return state.num
}
},
mutations:{},
actions:{},
modules:{}
})
home.vue
<template> <div> home{{$store.getters.num}} </div> </template> <script> export default { } </script> <style scoped> </style>
3.mutations
更改vuex的store中的状态的唯一方法是提交mutation
export default new Vuex.Store({
// state相当于组件中的data,专门用来存放全局的数据
state:{
num:0
},
// getters相当于组件中的computed,getters是全局的,computed是组件内部使用的
getters:{
num(state){
return state.num
}
},
// mutations相当于组件中的methods,但是不能使用异步方法(定时器,axios)
mutations:{
//
add(state,playload){
state.num+=playload?playload:1
}
},
actions:{},
modules:{}
})
目录btn.vue
<template> <div> <button @click="$store.commit('add',2)">按钮</button> </div> </template> <script> export default { methods:{ // addFn(){ // //调用store中的mutations里面的add方法 // // 传参使用payload // this.$store.commit('add',2) // } } } </script> <style scoped> </style>
4.actions
actions是store中专门用来处理异步的,实际修改状态值的,还是mutations
export default new Vuex.Store({
// state相当于组件中的data,专门用来存放全局的数据
state: {
num: 0
},
// getters相当于组件中的computed,getters是全局的,computed是组件内部使用的
getters: {
num(state) {
return state.num
}
},
// mutations相当于组件中的methods,但是不能使用异步方法(定时器,axios)
mutations: {
//
add(state, playload) {
state.num += playload ? playload : 1
},
reduce(state) {
state.num --
}
},
// actions专门用来处理异步,实际修改状态值的,依然是mutations
actions: {
reduceAsync(context){
context.commit('reduce')
}
},
modules: {}
})
btn.vue
<template> <div> <button @click="$store.commit('add',2)">按钮</button> <button @click="$store.dispatch('reduceAsync')">按钮</button> </div> </template> <script> export default { methods:{ // addFn(){ // //调用store中的mutations里面的add方法 // // 传参使用payload // this.$store.commit('add',2) // } } } </script> <style scoped> </style>
5.map*
mapState和mapGetters在组件中都是写在computed里面
<template>
<div>
about{{getnum}}
home{{num}}
</div>
</template>
<script>
import {mapGetters} from 'vuex'
import {mapState} from 'vuex'
export default {
computed: {
...mapState(['num'])
}
}
export default {
computed:{
...mapGetters(['getnum'])
}
}
</script>
mapMutations和mapActions在组件中都是写在methods里面
<template> <div> <button @click="add()">按钮</button> <button @click="reduceAsync()">按钮</button> </div> </template> <script> import {mapMutations,mapActions} from 'vuex' export default { methods:{ // addFn(){ // //调用store中的mutations里面的add方法 // // 传参使用payload // this.$store.commit('add',2) // } ...mapMutations(["add"]), ...mapActions(["reduceAsync"]) } } </script> <style scoped> </style>
6.拆分写法
store中的所有属性,都可拆分成单独的js文件来书写
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~