vue(八)状态管理vuex
Vuex是一个专门为vue.js应用程序开发的状态管理模式 + 库,采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
简单说,状态管理可以理解成为了更方便的管理组件之间的数据交互,提供了一个集中式的管理方案,任何组件都可以按照指定的方式进行读取和改变数据。
1、安装 npm install --save vuex
2、配置Vuex文件
import {createStore} from "vuex" export default createStore({ // 所有状态(数据)都存储在state中,这里设置一个初始状态 state:{ num:1 } })
import store from './store' const app= createApp(App) app.use(store)
# 1、使用$读取数据 <h3>num= {{ $store.state.num }}</h3> # 2、使用mapState读取 <h3>num={{ num }}</h3> <script> # 导入mapState import {mapState} from 'vuex' export default { name: "App", computed:{ ...mapState(["num"]) // 使用mapState获取num } }
常用的核心概念包含 State
, Getter
, Mutation
,
# 设置 getters import {createStore} from "vuex" export default createStore({ state:{ num:1 }, getters:{ getNum(state){ return state.num>1?state.num : 2 } } }) # 使用getters获取数据 <h3>num=={{ getNum }}</h3> import {mapGetters} from 'vuex' export default { name: "App", computed:{ ...mapGetters(["getNum"]) } }
# 设置Mutation export default createStore({ state:{ num:1 }, getters:{ getNum(state){ return state.num } }, mutations:{ setNum(state,n){ //n作为可传参数 state.num=state.num+n } } }) # 使用Mutation设置数据。通过事件来设置数据 <h3>num=={{ getNum }}</h3> <button @click="addNumHandler">add</button> import {mapGetters,mapMutations} from 'vuex' export default { name: "App", computed:{ ...mapGetters(["getNum"]) }, methods:{ ...mapMutations(["setNum"]), addNumHandler(){ this.setNum(5) } } }
-
-
Action提交的是Mutation,而不是直接变更状态
-
Action
# 设置Action import {createStore} from "vuex" import axios from "axios" export default createStore({ state:{ num:1 }, getters:{ getNum(state){ return state.num } }, mutations:{ setNum(state,n){ state.num=state.num+n } }, actions:{ asyncAddNum({commit}){ axios.get("http://xxx/x").then (res=>{ commit("setNum",res.data) //调用 Mutation 设置数据 }) } } }) # 使用Action设置数据 <h3>num=={{ getNum }}</h3> <button @click="addNumHandler">add</button> import {mapGetters,mapMutations,mapActions} from 'vuex' export default { name: "App", computed:{ ...mapGetters(["getNum"]) }, methods:{ ...mapMutations(["setNum"]), ...mapActions(["asyncAddNum"]), // 事件回调函数调用 actions 设置的请求 addNumHandler(){ this.asyncAddNum(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具