当前位置: 首页 > news >正文

大白话Vuex 核心概念(state、mutations、actions)的使用案例与原理

大白话Vuex 核心概念(state、mutations、actions)的使用案例与原理

Vuex是Vue.js应用程序中专门用来管理状态的工具,就好像是一个大管家,帮你把项目里一些重要的数据和操作管理得井井有条。下面用大白话结合案例来介绍Vuex核心概念state、mutations、actions的使用案例与原理:

state

  • 原理:state就像是一个仓库,用来存放数据的。在Vuex里,它就是用来存储整个应用程序中需要共享的数据的地方,比如用户的登录状态、用户名、购物车商品列表等。组件可以从这个仓库里获取数据来展示。
  • 使用案例
// 创建一个Vuex实例
const store = new Vuex.Store({
    state: {
        // 存储当前登录用户的姓名
        username: '张三' 
    }
});

// 在Vue组件中获取state中的数据
export default {
    computed: {
        user() {
            // 通过this.$store.state来访问state中的数据
            return this.$store.state.username; 
        }
    }
};

mutations

  • 原理:mutations就像是仓库管理员,专门负责修改仓库(state)里的数据。但是这个管理员很严格,只能通过它规定的方式来修改数据,这样可以保证数据的修改是可控的、可追踪的。而且mutations里的函数必须是同步的,不能是异步的,就像管理员一次只能做一件事,不能同时做好几件事。
  • 使用案例
const store = new Vuex.Store({
    state: {
        count: 0
    },
    mutations: {
        // 定义一个名为increment的mutation来增加count的值
        increment(state) { 
            state.count++;
        }
    }
});

// 在Vue组件中提交mutation
methods: {
    add() {
        // 通过this.$store.commit来提交mutation
        this.$store.commit('increment'); 
    }
}

actions

  • 原理:actions可以理解为是仓库的调度员,它不直接修改数据,但是可以指挥管理员(mutations)去修改数据。它的作用是处理一些异步操作,比如从服务器获取数据,等数据拿到了再告诉管理员去修改仓库里的数据。
  • 使用案例
const store = new Vuex.Store({
    state: {
        userList: []
    },
    mutations: {
        // 定义一个名为setUserList的mutation来设置用户列表
        setUserList(state, users) { 
            state.userList = users;
        }
    },
    actions: {
        // 定义一个名为fetchUsers的action来获取用户列表
        async fetchUsers({ commit }) { 
            // 假设这里是发送网络请求获取用户数据
            const response = await axios.get('https://example.com/api/users'); 
            // 拿到数据后,通过commit提交mutation来修改state
            commit('setUserList', response.data); 
        }
    }
});

// 在Vue组件中调用action
methods: {
    async getUsers() {
        // 通过this.$store.dispatch来调用action
        await this.$store.dispatch('fetchUsers'); 
    }
}

React的Diff算法和Vue的Diff算法有什么区别?

http://www.dtcms.com/a/39791.html

相关文章:

  • vue项目中动态添加类名样式不生效问题
  • 2025-02-26 学习记录--C/C++-C语言 整数格式说明符
  • 简单介绍JVM
  • Flutter系列教程之(6)——Tab导航与ListView使用
  • Lua的table类型的增删改查操作
  • http 协议和 https 协议的区别是什么?
  • 【1分钟学会万相文生视频】windows环境4080显卡部署Wan2.1-T2V-1.3B,亲手实操
  • 【STL】7.STL常用算法(1)
  • miqiu的分布式锁(二):实战——用JMeter验证JVM锁能否解决MySQL超卖问题
  • element-ui的组件使用
  • 每日一题——字母异位词分组
  • 2024 年出现的 11 大数据收集趋势
  • spring boot 连接FTP实现文件上传
  • linux中根目录满了
  • C#开发的Base64编码及解码完整源码及注意事项
  • 【含开题报告+文档+PPT+源码】基于大数据的交通流量预测系统
  • 论软件设计模式及其应用-软考
  • 【算法】797. 差分
  • C语言番外篇(4)--------->goto语句
  • 如何进行OceanBase 运维工具的部署和表性能优化
  • Linux 内核配置机制详细讲解
  • 【Jenkins】一种灵活定义多个执行label节点的jenkinsfile写法
  • 【由技及道】模块化战争与和平-论项目结构的哲学思辨【人工智智障AI2077的开发日志】
  • 【c++】【线程池】固定式线程池(FixedThreadPool)
  • 解锁C# XML编程:从新手到实战高手的蜕变之路
  • Document对象
  • 【组态PLC】基于西门子S7-200和博图V16和组态王十层起重机电梯设计【含PLC组态源码 M018期】
  • 什么是 Java 中的线程安全?
  • 使用前端 html css 和js 开发一个AI智能平台官网模板-前端静态页面项目
  • 运维脚本——10.服务健康检查与自愈