Vue3的学习---10

news/2024/10/11 10:20:47

10. Vuex

10.1 Vuex简介

10.1.1 Vuex概述

Vuex 是 Vue.js 应用程序的状态管理模式 + 库。它作为中央存储库,用于管理应用程序中所有组件的状态,并以可预测的方式进行状态变更。Vuex 的设计理念是基于 Flux 架构,主要由以下几个核心概念组成:

  1. State(状态)
    • 存储应用程序的所有状态数据。
    • 单一状态树,即一个对象包含了所有应用层级的状态。
  2. Getter(获取器)
    • 从 store 中的 state 中派生出一些状态,例如对列表进行过滤并计数。
    • 类似于 Vue 组件中的计算属性。
  3. Mutation(变更)
    • 唯一可以更改 state 的方法。
    • 必须是同步函数。
  4. Action(动作)
    • 类似于 mutation,但可以包含任意异步操作。
    • 提交的是 mutation,而不是直接变更状态。
  5. Module(模块)
    • 将 store 分割成模块,每个模块拥有自己的 state、mutation、action、getter,甚至是嵌套子模块。

10.1.2 如何在Vue-cli中引入Vue

  1. 在搭建Vue-cli工程时,选择添加Vuex模块,就可以在工程中引用Vuex模块了。

  2. 在src文件夹中会出现一个store文件夹,此文件夹中有一个index.js文件,这就是Vuex模块的js文件。

    import { createStore } from 'vuex'export default createStore({state: {},getters: {},mutations: {},actions: {},modules: {}
    })
    

10.2 Vuex的使用

10.2.1 state的使用

  1. 在store文件夹中的index.js文件中写入如下代码

    import { createStore } from 'vuex'export default createStore({state: {num: 100},getters: {},mutations: {},actions: {},modules: {}
    })
    
  2. 在两个组件中都添入如下代码

    <template><div><p>{{ $store.state.num }}</p></div>
    </template>
    

10.2.2 getter的使用

  1. 在store文件夹中的index.js文件中写入如下代码

    import { createStore } from 'vuex'export default createStore({state: {num: 100},getters: {newNum(state) {return state.num + 10}},mutations: {},actions: {},modules: {}
    })
    
  2. 在两个组件中都添入如下代码

    <template><div><p>{{ $store.getters.newNum }}</p></div>
    </template>
    

10.2.3 mutation的使用

  1. 在store文件夹中的index.js文件中写入如下代码

    import { createStore } from 'vuex'export default createStore({state: {num: 100},getters: {newNum(state) {return state.num + 10}},mutations: {addMethod(state, param) {state.num += param}},actions: {},modules: {}
    })
    
  2. 修改HomeView组件中的代码

    <template><div class="home"><img alt="Vue logo" src="../assets/logo.png"><p>{{ $store.state.num }}</p><p>{{ $store.getters.newNum }}</p><button @click="change">change</button></div>
    </template><script>
    export default {name: 'HomeView',methods: {change() {// commit就是调用mutations里的方法,第一个参数为方法名,第二个参数为传递的参数this.$store.commit('addMethod', 9)}}
    }
    

10.2.4 action的使用

  1. 在store文件夹中的index.js文件中写入如下代码

    import { createStore } from 'vuex'export default createStore({state: {num: 100},getters: {newNum(state) {return state.num + 10}},mutations: {addMethod(state, param) {state.num += param}},actions: {},modules: {}
    })
    
  2. 修改HomeView组件中的代码

    <template><div class="home"><img alt="Vue logo" src="../assets/logo.png"><p>{{ $store.state.num }}</p><p>{{ $store.getters.newNum }}</p><button @click="change">change</button></div>
    </template><script>
    export default {name: 'HomeView',methods: {change() {// dispatch是调用actions里的方法,第一个参数为方法名,第二个参数为传递的参数this.$store.dispatch('addMethod', 9)}}
    }
    </script>
    

10.2.5 总结

  1. state:存放全局共享数据。使用形式:$store.state.num
  2. getters:计算属性。使用形式:$store.getters.newnum
  3. mutations:处理同步数据的方法。使用形式:$state.commit('addMethod', 9)
  4. actions:处理异步数据的方法。使用形式:$state.dispatch('addMethod', 9)
    • 先使用$state.commit('addMethod', 9)的方式调用Vuex中的actions
    • actions再使用commit方法调用Vuex中的mutations

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/53577.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

如何发明 SAM

如何发明 SAM 我们想做一个结构,接受全部的子串,我们发现,如果考虑增量构造,每次加 1 个字符,增多的字串就是原来的后缀加上这个。 那么我们就这样做。所以我们一直需要一个集合,这些点接受全部后缀。(以上由红线组成的到根的路径就是我们每个时刻维护的集合,即所有后缀…

北京工作居住证申请

登录北京国际人才网 https://www.bjrcgz.gov.cn/ 先择个人登录-...到工作居住证申报页面 关联单位,找公司人事,输入后,关联,等公司审核 材料准备: 需要离职证明与社保记录合成一个PDF上传至其他材料里(离职证明必须与上家社保缴纳主体一致)应税材料:查询日期与社保查…

信息学奥赛初赛天天练-76-NOIP2015普及组-基础题1-计算机存储、硬件系统、操作系统、进制转换、二进制加法

NOIP 2016 普及组 基础题1 1 1MB 等于 ( ) A 10000 字节 B 1024 字节 C 10001000 字节 D 10241024 字节 2 在 PC 机中,PENTIUM(奔腾)、酷睿、赛扬等 是指( ) A 生产厂家名称 B 硬盘的型号 C CPU 的型号 D 显示器的型号 3 操作系统的作用是( ) A 把源程序译…

Pinely Round 4 (Div. 1 + Div. 2) VP记录

Pinely Round 4 (Div. 1 + Div. 2) VP记录 场上打了 ABCDF,被 E 二粉兔创飞了。 这场的构造题有:B D E G I,乐死了。 A 把数列黑白染色,第一个格为黑色,那么每次删除会删除一个黑格子和一个白格子。而黑格子始终比白格子多一个,因此最后选到的是黑格子。答案极为黑格子的…

Spring 各版本发布时间与区别

版本 版本特性Spring Framework 1.0 1. 所有代码都在一个项目中 2. 支持核心功能IoC、AOP 3. 内置支持Hibernate、iBatis等第三方框架 4. 对第三方技术简单封装。如:JDBC、Mail、事务等 5. 只支持XML配置方式。6.主要通过 XML 配置文件来管理对象和依赖关系,配置工作较为繁琐…

云知声多模态模型:实时多模态输入输出;独立于 Siri ,苹果或开发新 AI 用于机器人丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

dolphinscheduler 自定义参数任务传递

select concat(year(CURRENT_DATE())-2,"-01-01 00:00:00") as deleteTime 下一个任务 ${deleteTime} 直接引用