当前位置: 首页 > 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算法有什么区别?

相关文章:

  • 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 运维工具的部署和表性能优化
  • 建设一个网站平台的费用/网页广告调词平台多少钱
  • 怎样开发一个网站/steam交易链接怎么用
  • 没有网站可以做seo/什么平台打广告比较好免费的
  • 都江堰建设局官方网站/网站seo好学吗
  • 阿里巴巴怎么做网站/sem优化和seo的区别
  • 营销型网站建设优势/百度咨询电话人工台