vue全家桶进阶之路39:Vue3 状态管理
Vue3 的状态管理主要是通过 Vuex 4 来实现。Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
在Vue3的状态管理中,以下是各个属性的作用:
state:存储应用程序中的状态数据。它可以包含任何类型的数据,包括基本类型、对象、数组等。可以通过commit和dispatch方法来修改state中的数据。getters:允许你基于 store 中的 state 数据进行计算。类似于Vue组件中的计算属性。通过getters,我们可以将store中的状态数据进行加工、过滤、处理后再返回给组件使用,而无需在组件中手动操作state数据。mutations:用于修改store中的状态数据。每个mutation都有一个字符串的类型和一个handler函数。在handler函数中,我们可以进行同步操作来修改state中的数据。需要注意的是,mutations中的函数必须是同步函数,否则会导致状态不可预测。actions:用于处理异步任务以及提交mutations。在actions中,我们可以编写异步代码,例如向后端API发送请求获取数据等操作。然后通过commit方法提交mutation,以更新state中的数据。actions中的函数是可以是异步函数的,因此我们可以在其中执行异步操作。modules:允许我们将store分割成模块,每个模块都有自己的state、mutations、actions、getters等,以便于管理和维护。每个模块都可以有自己的子模块,形成树状结构。
总的来说,状态管理的主要作用是将组件中的状态数据集中管理,从而避免了在不同组件之间传递大量的数据。同时,使用状态管理可以使我们更好地组织代码,将逻辑分离,提高代码的可维护性和可读性。
下面是一个简单的示例,演示了如何在 Vue3 中使用 Vuex 4 来实现状态管理。
首先,在项目中安装 Vuex 4:
npm install vuex@next --save
然后,在应用程序的入口文件中,创建一个 Vuex store 并导出它:
import { createStore } from 'vuex'
const store = createStore({
state() {
return {
count: 0
}
},
mutations: {
increment(state) {
state.count++
},
decrement(state) {
state.count--
}
},
actions: {
incrementAsync({ commit }) {
setTimeout(() => {
commit('increment')
}, 1000)
}
},
getters: {
count(state) {
return state.count
}
}
})
export default store
在上面的示例中,createStore() 函数用于创建一个 Vuex store。在 state 对象中,定义了应用程序的状态,这里只定义了一个 count 属性,并初始化为 0。在 mutations 对象中,定义了修改状态的方法,这里定义了两个方法:increment 和 decrement。在 actions 对象中,定义了异步操作的方法,这里定义了一个名为 incrementAsync 的方法,它在 1 秒后调用 increment 方法。在 getters 对象中,定义了计算属性的方法,这里定义了一个名为 count 的计算属性。
接着,在应用程序的入口组件中,使用 useStore() 函数来注入 Vuex store:
<template>
<div>
<h1>Count: {{ count }}</h1>
<button @click="increment">Increment</button>
<button @click="decrement">Decrement</button>
<button @click="incrementAsync">Increment Async</button>
</div>
</template> <script>
import { defineComponent, useStore } from 'vue' export default defineComponent({
setup() {
const store = useStore() const increment = () => {
store.commit('increment')
} const decrement = () => {
store.commit('decrement')
} const incrementAsync = () => {
store.dispatch('incrementAsync')
} return {
count: store.getters.count,
increment,
decrement,
incrementAsync
}
}
})
</script>
在上面的示例中,useStore() 函数用于注入 Vuex store,并将其赋值给 store 变量。然后,定义了三个方法:increment、decrement 和 incrementAsync,它们分别调用了 Vuex store 中定义的 increment、decrement 和 incrementAsync 方法。在组件的 return 语句中,使用 store.getters.count 访问了计算属性 count 的值,以供模块调用。
Vue3提供了一个新的状态管理工具,即Vuex 4。它与Vue3一起使用,可用于在应用程序中管理全局状态。Vuex 4的设计目标是在减少样板代码的同时提高开发人员的工作效率和开发速度。
与Vuex 3相比,Vuex 4的一个重要改变是将核心代码与Vue3的新响应式API集成在一起。这意味着你不需要使用getter和setter来声明状态或修改它们,而可以使用Vue3的新响应式API。
import { createStore } from 'vuex'
const counterModule = {
state() {
return {
count: 0
}
},
mutations: {
increment(state) {
state.count++
},
decrement(state) {
state.count--
}
},
actions: {
asyncIncrement(context) {
setTimeout(() => {
context.commit('increment')
}, 1000)
}
},
getters: {
doubledCount(state) {
return state.count * 2
}
}
}
const store = createStore({
modules: {
counter: counterModule
}
})
export default store
在这个例子中,我们使用createStore函数创建一个新的Vuex store。counterModule是一个包含计数器状态的模块,其中包含一个state对象,用于存储计数器值,以及mutations、actions和getters对象,用于操作和派生计数器状态。
最后,我们将计数器模块添加到store中,以便在应用程序中访问它。现在我们已经设置好了Vuex 4 store,我们可以在Vue3应用程序中使用它来管理全局状态。
vue全家桶进阶之路39:Vue3 状态管理的更多相关文章
- Vue 全家桶 + Electron 开发的一个跨三端的应用
代码地址如下:http://www.demodashi.com/demo/11738.html GitHub Repo:vue-objccn Follow: halfrost · GitHub 利用 ...
- Vue全家桶高仿小米商城
大家好,我是河畔一角,时隔半年再次给大家带来一门重量级的实战课程:<Vue全家桶高仿小米商城>,现在很多公司都在参与到商城的构建体系当中,因此掌握一套商城的标准开发体系非常重要:商城的开始 ...
- vue证明题一,vue全家桶的构成
简单说下vue的构成,当然是简单为主,网上这东西满天飞,简单说几句就ok 1.vue是什么 vue读作view,是一种js框架.只关注于视图层,操作内容包括js,html,css 2.vue全家桶是什 ...
- 用 Vue 全家桶二次开发 V2EX 社区
一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...
- Vue全家桶
简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计. 为什么 ...
- 从零开始系列之vue全家桶(3)安装使用vuex
什么是vuex? vuex:Vue提供的状态管理工具,用于同一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象. 即data中属性同时有一个或几个组件同时使用,就是data中共用的属性. ...
- 使用vue全家桶制作博客网站
前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vue-router.vuex.v ...
- 转载: 使用vue全家桶制作博客网站 HTML5 移动网站制作的好教程
使用vue全家桶制作博客网站 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue. ...
- Vue全家桶介绍
一直不清楚全家桶是什么玩意,上网搜了一下,才知道就是平时项目中使用的几个依赖包,下面分享一下 Vue 全家桶介绍 Vue有著名的全家桶系列,包含了vue-router(http://router.vu ...
- 一个简单的假vue全家桶(vue+vue-router+require)
首先说明我觉得这是一个比较好理解的vue全家桶(虽然是假的),模块化也是用require来做的,而且如果后期有必要压缩我也会用gulp来做 1.依赖个个本地模块,require只是用来载入page,这 ...
随机推荐
- 《MySQL是怎样运行的》第七章小结
- c++实现类似python的map一样,批量操作一个vector的功能【python一样写c++、三】
python里有一个东西,叫map. 它可以实现像这样,对list每个元素进行操作,并返回新的list(python3是迭代器) 像这样 a=list(map(int,input().split()) ...
- Celery框架从入门到精通
目录 Celery介绍.安装.基本使用 一.Celery服务 1.celery架构 2.celery快速使用 二.Celer包结构 1.创建clery包结构 2.Celery执行异步任务.延迟任务.定 ...
- mysql查询近N天的数据
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...
- pat乙级自我回顾:一般错误出现原因
在obsidian里面写的有些引用没用,需要的可以评论区或者私信我呦~ 对于错误,末尾的换行不影响格式, 段错误: 一般是设置的数组小于题目给定的要求,循环条件i--写成i++,数组下标写错,也有可能 ...
- Less-4 报错注入
补坑:报错注入 当我们 union 无法注入的时候,可以使用报错注入,这里我们有三种报错注入,xpth语法错误和count()+rand()+floor()+group by重复组建错误 extrac ...
- 使用float进行比较问题处理
float compare Abstract 使用float数据进行精确计算和比较,可能由于精度问题导致程序逻辑异常. Explanation 使用float数据进行比较,计算机表达double和fl ...
- 50个Java面试必问的面试题,我都给你整好了
我们整理了一份主要的Angular面试问题清单,分为三部分: 角度面试问题–初学者水平 角度面试问题–中级 角度面试问题–高级 初学者水平–面试问题 1.区分Angular和AngularJS. 2 ...
- SICP:求值和环境模型(Python实现)
绪论 我们在第一章引进复合过程时,采用了求值的代换模型定义了将过程应用于实参(arguments)的意义: 将一个复合过程应用于一些实参,也就意味着用实参替换过程体里对应的形参(formal para ...
- ColorWell - web 颜色代码取色工具,Mac 上的优秀调色板
ColorWell 是 Mac 上的一款非常优秀的颜色取色工具,她具有历史记录.调色板同步等功能,非常适合 web 或 App 开发人员使用 下载 ► ColorWell 下载安装 ⇲ 详细介绍 美丽 ...