Vue.js中的状态管理:理解和使用Vuex

目录

前言

Vue.js 样式绑定

Vue.js class

class 属性绑定

实例 1

实例 2

实例 3

实例 4

数组语法

实例 5

实例 6

Vue.js style(内联样式)

实例 7

实例 8

实例 9

Vue.js 组件

全局组件

全局组件实例

局部组件

局部组件实例

Prop

Prop 实例

动态 Prop

Prop 实例

Prop 实例

Prop 验证

总结



 

前言

Vuex是Vue.js的一个状态管理库,它可以帮助我们更好地管理应用程序的状态。在Vue.js中,组件之间的通信往往需要借助于props和emit来完成,但是当应用程序的状态变得比较复杂时,这种方式就变得比较麻烦。Vuex可以帮助我们更好地管理状态,以及在组件之间共享状态。

本篇教程将介绍Vuex的基本概念、使用方法和常见应用场景。我们将通过一个简单的计数器示例来演示如何使用Vuex,并且通过不同的场景,逐步深入Vuex的使用。

Vue.js 样式绑定

Vue.js class

class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。

Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。


class 属性绑定

我们可以为 v-bind:class 设置一个对象,从而动态的切换 class:

实例 1

实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示:

<div v-bind:class="{ 'active': isActive }"></div>

以上实例 div class 为:

<div class="active"></div>

我们也可以在对象中传入更多属性用来动态切换多个 class 。

实例 2

text-danger 类背景颜色覆盖了 active 类的背景色:

<div class="static"v-bind:class="{ 'active' : isActive, 'text-danger' : hasError }">
</div>

以上实例 div class 为:

<div class="static active text-danger"></div>

我们也可以直接绑定数据里的一个对象:

实例 3

text-danger 类背景颜色覆盖了 active 类的背景色:

<div id="app"><div v-bind:class="classObject"></div>
</div>

实例 3 与 实例 2 的渲染结果是一样的。

此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式:

实例 4

new Vue({el: '#app',data: {isActive: true,error: {value: true,type: 'fatal'}},computed: {classObject: function () {return {base: true,active: this.isActive && !this.error.value,'text-danger': this.error.value && this.error.type === 'fatal',}}}
})

数组语法

我们可以把一个数组传给 v-bind:class ,实例如下:

实例 5

<div v-bind:class="[activeClass, errorClass]"></div>

以上实例 div class 为:

<div class="active text-danger"></div>

我们还可以使用三元表达式来切换列表中的 class :

实例 6

errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类:

<div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>


Vue.js style(内联样式)

我们可以在 v-bind:style 直接设置样式:

实例 7

<div id="app"><div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
</div>

以上实例 div style 为:

<div style="color: green; font-size: 30px;">菜鸟教程</div>

也可以直接绑定到一个样式对象,让模板更清晰:

实例 8

<div id="app"><div v-bind:style="styleObject">菜鸟教程</div>
</div>

v-bind:style 可以使用数组将多个样式对象应用到一个元素上:

实例 9

<div id="app"><div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>
</div>

注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。

Vue.js 组件

组件(Component)是 Vue.js 最强大的功能之一。

组件可以扩展 HTML 元素,封装可重用的代码。

组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树:

注册一个全局组件语法格式如下:


Vue.component(tagName, options)

tagName 为组件名,options 为配置选项。注册后,我们可以使用以下方式来调用组件:


<tagName></tagName>

全局组件

所有实例都能用全局组件。

全局组件实例

注册一个简单的全局组件 kxdang,并使用它:

<div id="app"><kxdang></kxdang>
</div><script>
// 注册
Vue.component('kxdang', {template: '<h1>自定义组件!</h1>'
})
// 创建根实例
new Vue({el: '#app'
})
</script>

局部组件

我们也可以在实例选项中注册局部组件,这样组件只能在这个实例中使用:

局部组件实例

注册一个简单的局部组件 kxdang,并使用它:

<div id="app"><kxdang></kxdang>
</div><script>
var Child = {template: '<h1>自定义组件!</h1>'
}// 创建根实例
new Vue({el: '#app',components: {// <kxdang> 将只在父模板可用'kxdang': Child}
})
</script>


Prop

prop 是子组件用来接受父组件传递过来的数据的一个自定义属性。

父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用 props 选项声明 "prop":

Prop 实例

<div id="app"><child message="hello!"></child>
</div><script>
// 注册
Vue.component('child', {// 声明 propsprops: ['message'],// 同样也可以在 vm 实例中像 "this.message" 这样使用template: '<span>{{ message }}</span>'
})
// 创建根实例
new Vue({el: '#app'
})
</script>

动态 Prop

类似于用 v-bind 绑定 HTML 特性到一个表达式,也可以用 v-bind 动态绑定 props 的值到父组件的数据中。每当父组件的数据变化时,该变化也会传导给子组件:

Prop 实例

<div id="app"><div><input v-model="parentMsg"><br><child v-bind:message="parentMsg"></child></div>
</div><script>
// 注册
Vue.component('child', {// 声明 propsprops: ['message'],// 同样也可以在 vm 实例中像 "this.message" 这样使用template: '<span>{{ message }}</span>'
})
// 创建根实例
new Vue({el: '#app',data: {parentMsg: '父组件内容'}
})
</script>

以下实例中使用 v-bind 指令将 todo 传到每一个重复的组件中:

Prop 实例

<div id="app"><ol><todo-item v-for="item in sites" v-bind:todo="item"></todo-item></ol>
</div><script>
Vue.component('todo-item', {props: ['todo'],template: '<li>{{ todo.text }}</li>'
})
new Vue({el: '#app',data: {sites: [{ text: 'Runoob' },{ text: 'Google' },{ text: 'Taobao' }]}
})
</script>

注意: prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。

Prop 验证

组件可以为 props 指定验证要求。

为了定制 prop 的验证方式,你可以为 props 中的值提供一个带有验证需求的对象,而不是一个字符串数组。例如:


Vue.component('my-component', {props: {// 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)propA: Number,// 多个可能的类型propB: [String, Number],// 必填的字符串propC: {type: String,required: true},// 带有默认值的数字propD: {type: Number,default: 100},// 带有默认值的对象propE: {type: Object,// 对象或数组默认值必须从一个工厂函数获取default: function () {return { message: 'hello' }}},// 自定义验证函数propF: {validator: function (value) {// 这个值必须匹配下列字符串中的一个return ['success', 'warning', 'danger'].indexOf(value) !== -1}}}
})

当 prop 验证失败的时候,(开发环境构建版本的) Vue 将会产生一个控制台的警告。

type 可以是下面原生构造器:

  • String
  • Number
  • Boolean
  • Array
  • Object
  • Date
  • Function
  • Symbol

type 也可以是一个自定义构造器,使用 instanceof 检测。

总结

通过本教程,我们了解了Vuex的基本概念和使用方法。我们学习了State、Mutation、Getter、Action

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础服务4——ftp

文章目录 一、基本了解1.1 C/S型架构1.2 数据连接模式1.3 用户认证 二、安装服务端2.1 安装vsftpd2.2 配置文件2.3 主配置文件参数2.4 windows访问服务端2.4.1 系统用户访问2.4.2 匿名用户访问2.4.2 开启客户端上传权限2.4.3 开启客户端其他权限2.4.4 开启客户端删除、修改权限…

大数据赋能交通业务管理——远眺智慧交通集成管控系统

随着交通管理需求的不断提升&#xff0c;原有系统管理模式的缺点逐渐显露&#xff0c;各业务系统的相互独立、各自为战&#xff0c;成为交通管理人员全局把控交通资源、实现交通综合管控的壁垒。 智慧交通集成管控平台通过统一标准&#xff0c;集成交警各类业务系统、整合相关数…

解决JD-GUI-1.6.6 中文乱码

解决JD-GUI-1.6.6 中文乱码 原因解决办法的方式一解决办法的方式二最终版 原因 在拖入java文件进行反编译时候发现中文出现了乱码。 g) 解决办法的方式一 值得注意的是&#xff1a;这种方式只能每次输入命令才弹出jd-gui窗口才能不能乱码 每次打开powershell并输入这一串命…

LeetCode 0002. 两数相加

【LetMeFly】2.两数相加 力扣题目链接&#xff1a;https://leetcode.cn/problems/add-two-numbers/ 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff…

SpringBoot3之GraalVM之Windows详细安装及使用教程

配置Maven环境变量 我直接使用的是IDEA plugins文件夹下的maven 新建MAVEN_HOME环境变量 Path环境变量追加 %MAVEN_HOME%\bin安装Visual Studio Community 因为GraalVM需要调用操作系统的底层工具&#xff0c;而Windows底层工具是VisualStudio&#xff0c;所以我们要先下载…

LabVIEW开发光线追踪可视化分段反射器测试台

LabVIEW开发光线追踪可视化分段反射器测试台 为了满足美国国家航空航天局&#xff08;NASA&#xff09;对未来望远镜的要求&#xff0c;新的红外空间天文台将在哈勃太空望远镜使用寿命结束后取代其。作为HST的继任者&#xff0c;詹姆斯韦伯太空望远镜&#xff08;JWST&#xf…

机器学习-方差和偏差理论

机器学习-方差和偏差理论 关于机器学习方差和偏差的内容其实很重要&#xff0c;这个方差和偏差可以帮助我们去分析&#xff0c;模型的泛化能力和过拟合的程度。 下面我们先给存储方差和偏差的公式&#xff1a; 注意&#xff0c;下式当中&#xff0c; f ( x ; D ) 表示在数据集…

Gitlab升级报错二:rails_migration[gitlab-rails] (gitlab::database_migrations line 51)

gitlab-ctl 修改文件目录后出现以下错误&#xff1a;从root --> home 先停掉gitlab: gitlab-ctl stop 单独启动数据库&#xff0c;如果不单独启动数据库&#xff0c;就会报以上错误 sudo gitlab-ctl start postgresql 解决办法&#xff1a; sudo gitlab-rake db:migrat…

登录校验-interceptor/拦截器

Interceptor 概念&#xff1a;拦截前端对后端的某些请求 使用步骤 自定义拦截器类&#xff0c;实现HandlerInterceptor接口&#xff0c;重写所有的方法&#xff08;preHandle方法在controller执行之前执行、【postHandle、afterCompletion】在controller执行后执行&#xff0…

《项目实战》构建SpringCloud alibaba项目(一、构建父工程、公共库、网关))

系列文章目录 构建SpringCloud alibaba项目&#xff08;一、构建父工程、公共库、网关&#xff09; 构建SpringCloud alibaba项目&#xff08;二、构建微服务鉴权子工程store-authority-service&#xff09; 文章目录 系列文章目录1、概要2、整体架构流程2.1、技术结构组成部分…

计算机网络-网络体系结构

目录 计算机网络的基本概念计算机网络的定义组成与功能计算机网络的分类按照网络的作用范围进行分类按照网络的使用者进行分类 计算机网络主要性能指标 计算机网络体系结构计算机网络协议、接口、服务等概念ISO/OSI 参考模型和 TCP/IP 模型OSI七层模型TCP/IP 模型封装与分用 计…

Java序列化与反序列化

概念&#xff1a; 序列化&#xff1a;将对象转化成字节序列反序列化&#xff1a;将字节序列转化成对象 在Java中&#xff0c;通过实现Serializable接口来声明一个类是可序列化的。被序列化的类及其内部所有引用对象&#xff0c;都必须实现Serializable接口&#xff0c;否则序列…