computed怎么使用_Vuex 基本使用

简单介绍

iPhone X 是 iPhone, Vuex 并不是 Vue.我们查看官方文档可以知道:

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。

怎么理解呢?就拿我两位数的资产的银行卡来说吧,基本的存钱取钱,就是状态管理。

怎么用

我们将以一个简单的 Todo 作为例子,来讲解 Vuex 的基本使用。

安装

npm install vuex --save

初始化

首先需要在项目的 src 目录下,新建一个 Vuex 的目录 store,结构如下:

v2-1d48c69ff7331250c52545c829c2cc5e_b.jpg

初始化 Vuex:

// index.js
import Vue from 'vue'
import Vuex from 'vuex'
import state from './state.js'Vue.use(Vuex)export default new Vuex.Store({state
})

引入 Vuex 是理所当然的,除此之外执行 Vue.use(Vuex) 来全局安装 Vuex. Vuex.Store 即 Vuex 的构造函数,来初始化 Vuex 实例。这里可以看到,我们在 Vuex 构造函数中传入了一个 state 选项,那这个 state 是什么呢?

State

State 从字面意思理解,就是状态,在 Vuex 里面,什么代表了状态呢?数据。State 是 Vuex 这一状态管理工具的唯一的数据源,所有的数据都储存在里面。 State 的写法如下:

// state.js
const state = {todoList: JSON.parse(localStorage.getItem('todoList')) || []
}export default state

这里声明了一个 state, 里面有一个 todoList 的字段,todoList 的数据是去 localStorage 里面拿的,如果没有,就是一个空数组。 好了,现在我们的状态已经有了,接下来就是要在组件里面,获取这个 state, 也就是让我们的组件拿到这里的数据。

Getter

Getter, 顾名思义,就是一个“取”的操作,来拿 state 里面的数据。Getter 的写法如下:

// getters.js
export const todoList = state => state.todoList

这里声明并输出了一个 todoList 函数,函数的参数是 state, 返回值 state.todoList. Getter 函数接受 state 作为它的第一个参数。这里我们就取到了上一节 state 里面的 todoList. 在需要 todoList 数据的组件当中,可以利用 mapGetters 将数据映射到计算属性。写法如下:

import { mapGetters } from 'vuex'...export default {...computed: {...mapGetters(['todoList'])}...
}

调用的时候,和普通的计算属性别无二致:

<ul class="todo-list"><li v-for="(item, index) in todoList" :key="index" class="todo-item" >...</li>
</ul>

这样,todoList 就被渲染到了页面中:

v2-43d0c0eccee10972a6c53d048c5dadff_b.jpg

当然,不管是标记一个事项为完成,还是添加删除事项,todoList 都会产生变化,也就是 state 会变化。那我们怎么去改变 state 呢?这就需要 mutation 的帮助 。

Mutation

Mutation 是 Vuex 当中改变 state 唯一的方法。Mutation 使用与事件处理函数非常相似,都具有类型和回调函数。 这里把 mutation 比作事件,首先来规定“事件类型”:

// mutation-types.js
export const SET_TODO_LIST = 'SET_TODO_LIST'

这里规定了一个 SET_TODO_LIST 的类型。 类型是不可变的,所以我们将其声明为常量。 然后再来写“事件”的“回调”:

// mutations.js
import * as types from './mutation-types'const mutations = {[types.SET_TODO_LIST] (state, todoList) {state.todoList = todoList}
}
export default mutations

可以看到, mutations 是一个对象,一个“事件类型”就对应可一个处理函数。处理函数接受 state 作为它的第一个参数,第二个参数是额外的,一般称之为“荷载 (payload) ”。 这里我们的荷载是一个 todoList,这个处理函数将 state 原来的 todoList 改为传入的荷载。 要使用 mutations,在 Vuex 的构造函数中,就要将 mutations 选项加进去:

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state.js'
import * as getters from './getters'
import mutations from './mutations'
import createLogger from 'vuex/dist/logger'Vue.use(Vuex)const debug = process.env.NODE_ENV !== 'production'export default new Vuex.Store({state,getters,mutations,plugins: debug ? [createLogger()] : []
})

现在,构造函数中已经传入了 mutations,接下来,就是在组件中使用 mutations(这里的第四个选项 plugins 并不影响 mutation 的功能,用途是在控制台打印 Vuex 操作的信息).

TodoList 组件中,我们在“添加事项”这一动作提交 mutation, 改变 state. 组件内的代码如下:

// todo-list.vueimport { mapGetters, mapMutations } from 'vuex'export default {...methods: {...addItem () {let itemText  = window.prompt('请输入要添加的事项:')if (itemText) {let list = this.todoList.slice();list.push({text: itemText,done: false,checked: false})this.setTodoList(list)}}......mapMutations({setTodoList: 'SET_TODO_LIST'})}}

接下来就去 todo 里面添加一个条目。如图,添加了一个 coding 事项:

v2-038a5279d2ff7cf068155c460c41798b_b.jpg

可在 vue 的 devtool 观察到如下结果:

v2-7dbd10220d3c9e9c28c8022b2e95c122_b.jpg

可以看到 mutation 的 payload 以及 type 信息。 再来观察 Vuex 的 createLogger 插件在控制台输出的信息:

v2-bd172c54df2eee51324cc633fdf8c490_b.jpg

可以看到,这里进行了一次 SET_TODO_LIST 的 mutation 操作。从 prev state可以知道 ,操作前, todoList 只有三个条目。进行 SET_TODO_LIST 操作时,传入的荷载为四个条目的 todoList。操作后,观察 next state 可知,操作后的 todoList 已经有四个事项。 在线上的 Demo 中可打开控制台,添加或者删除条目,观察 Vuex 的状态变化。

总结

这里用一个 todo 的例子,简单介绍了 Vuex 基本的 getters 和 mutatiosn 操作,更多的细节,可参考官方文档 。 Vuex 的应用场景是,当 n 多个组件之间的相互通信让人眼花缭乱,那么借助 Vuex 保存多个组件共享的状态,只需操作 state,就能在组件之间同步状态。

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

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

相关文章

自然数 素数 质数_在Java中获取素数的无限列表

自然数 素数 质数一个常见的问题是确定数字的素因式分解。 蛮力方法是审判部门&#xff08; 维基百科 &#xff0c; 可汗学院 &#xff09;&#xff0c;但是如果必须考虑多个数字&#xff0c;这需要大量的浪费工作。 一种广泛使用的解决方案是Eratosthenes筛&#xff08; 维基…

mysql 大数据 join_MySQL JOIN算法原理

MySQL的JOIN相关操作&#xff0c;是通过“嵌套循环连接算法&#xff0c;NLJ”或者该算法的优化变体“块嵌套循环连接算法&#xff0c;BNLJ”来实现的。##### 嵌套循环连接算法两个表join时&#xff0c;可以简单理解为两层for循环&#xff0c;外层循环一般称作驱动表&#xff0c…

windows安装python3步骤_Windows下python3和python2安装与一起使用

一、python2和python3安装 2、安装步骤&#xff0c;直接双击运行&#xff0c;记得勾选添加环境变量就可以。图片1.png 3、安装已经选择了添加这个环境变量&#xff0c;所以不用再去配置。 如果没有勾选&#xff0c;得自己去设置。 鼠标右键我的电脑 -> 属性 -> 点击高级系…

mysql ondelete_MySQL on delete cascade语句

在本教程中&#xff0c;您将学习如何使用MySQL ON DELETE CASCADE引用操作来执行外键从多个相关表中删除数据。在上一个教程中&#xff0c;我们学习了如何使用单个DELETE语句从一个或多个相关表中删除数据。但是&#xff0c;MySQL提供了一种更为有效的方法&#xff0c;称为ON D…

您想了解的所有Throwable

本文是有关异常的教程。 但不是通常的一种。 其中有许多内容可以告诉您异常的含义&#xff0c;如何抛出异常&#xff0c;捕获异常&#xff0c;已检查异常与运行时异常之间的区别&#xff0c;等等。 没有必要了。 这对您来说也很无聊。 如果没有&#xff0c;那么请阅读其中的一本…

python构建二叉树_BinaryTree:学习二叉树的Python库

Python部落(python.freelycode.com)组织翻译&#xff0c;禁止转载&#xff0c;欢迎转发。简介&#xff1a; 您是否在为考试、作业或技术面试学习二叉树&#xff1f; Binarytree是一个Python库&#xff0c;它通过一个简单的API生成二叉树&#xff0c;可以进行检查和操作。它让您…

mysql union as 注入_sql注入入门 之 mysql 常规注入 [ union方式 ]

1,常规数字型 mysql 实例注入点,如下:1https://www.vuln.com/md_materia_profile_view.php?viewid22,依旧先尝试下经典的单引号,如下,虽然没暴露出明显的数据库报错信息,但我们发现,此时返回的页面已经异常了,经验判断,十有八九是个注入点,先不管那么多,我们继续1https://www.…

gradle docker_带有Gradle的Docker容器分为4个步骤

gradle docker您是否需要通过Java Web应用程序创建Docker映像&#xff1f; 您在使用Gradle吗&#xff1f; 如果是这样&#xff0c;那么您距Docker nivana仅4步之遥。 对于此示例&#xff0c;我将使用一个简单的Spring Boot应用程序。 您可以在我的名为galoshe的Github存储库中…

mysql数据库连接关闭_解决mysql数据库连接自动关闭问题

MySQL是一个小型关系型数据库管理系统&#xff0c;由于MySQL体积小、速度快、总体拥有成本低&#xff0c;尤其是开放源码这一特点&#xff0c;许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。关于mysql自动关闭服务的现象&#xff0c;可以通过mysql服务器…

python socket编程_Python学习记录-socket编程

1. OSI七层模型详解2. Python socket 什么是 Socket? Socket又称”套接字”&#xff0c;应用程序通常通过”套接字”向网络发出请求或者应答网络请求&#xff0c;使主机间或者一台计算机上的进程间可以通讯。 Python 提供了两个级别访问的网络服务&#xff1a; 低级别的网络服…

REST / HTTP方法:POST与PUT与PATCH

每个HTTP请求都包含一个方法 &#xff08;有时称为verb &#xff09;&#xff0c;该方法指示对标识的资源执行的操作。 在构建RESTful Web服务时&#xff0c;HTTP方法POST通常用于创建资源&#xff0c;而PUT用于资源更新。 尽管在大多数情况下这很好&#xff0c;但使用PUT进行…

判断frame是否已创建_类的创建

1. 士兵 许三多 有一把 AK47 2. 士兵 可以开火 3. 枪 能够 发射 子弹 4. 枪 装填 子弹---增加子弹数量 class Gun:def __init__(self,type):self.type type# 刚开始枪没有子弹self.bullet_count 0def __str__(self):return ("%s 已到位" % self.type)def shoot(sel…

mysql 安装盒子_Windows2008 装 MySQL 问题

昨天在2008里装MySQL&#xff0c;遇以了一些问题&#xff0c;装的是mysql-5.6.20-winx64.msi版本&#xff0c;不知道是版本太新还是兼容&#xff0c;还是系统权限配置问题&#xff0c;老是报错&#xff0c;多数是杂乱的错误&#xff0c;这里主要记一下MySQL的错误&#xff1a;安…

@select注解_Mybatis基本知识十七:Mybatis注解式开发-单表注解式开发

上一篇文章&#xff1a;《Mybatis基本知识十六&#xff1a;查询缓存之第三方查询缓存》若文中有纰漏,请多多指正&#xff01;&#xff01;&#xff01;1.前言使用Mybatis进行开发&#xff0c;不仅可以使用mapper配置文件进行开发&#xff0c;也可以使用注解的方式。映射文件中无…

mysql主从切换机制torch_MySQL Replication设置(Master/Slave)实现主从复制

一、Master配置1、my.cnf配置# vim /etc/mysql/mariadb.conf.d/50-server.cnf[mysqld]log-binmysql-bin //[必须]启用二进制日志server-id140 //[必须]服务器唯一ID&#xff0c;默认是1&#xff0c;一般取IP最后一段2、重启mysqlsudo service mysql restart3、在主服务器上建立…

junit测试线程_一个在自己的线程中运行测试的JUnit规则

junit测试线程有时&#xff0c;能够在单独的线程中运行JUnit测试会很有帮助。 特别是在编写与封装的ThreadLocal或类似对象进行交互的集成测试时&#xff0c;这可能会派上用场。 单独的线程将隐式确保每次测试运行都未初始化threadlocal的与线程相关的引用。 这篇文章介绍了提供…

maven servlet配置_第一个Servlet配置

使用IntelliJ IDEA创建一个Simple Maven项目2. Add Framework Support3. 配置Tomcat打开菜单Run -> 选择Edit Configuration 如果侧边栏没有Tomcat&#xff0c;点击“”号 -> 选择“Tomcat Server” -> 选择“Local”&#xff0c;到此画面 ,Apply -> OK4. 在Tomcat…

如何将四元数方向转化为旋转举证_是否有将四元数旋转转换为欧拉角旋转的算法?...

frodo2975..7我一直在寻找类似解决方案的几天,我终于遇到了这个网站,它有一个将四元数转换为任意Euler和Tait-Bryan旋转的算法!这是代码:///// Quaternion to Euler///enum RotSeq{zyx, zyz, zxy, zxz, yxz, yxy, yzx, yzy, xyz, xyx, xzy,xzx};void twoaxisrot(double r11, do…

使用Spring Boot和DJL进行深度学习

总览 这是Spring Boot上的另一篇文章 &#xff0c;该文章将展示如何使用Deep Java Library &#xff08;DJL&#xff09;构建示例Web应用程序&#xff0c; Deep Java Library &#xff08;DJL&#xff09;是Java的开源深度学习库&#xff0c;用于诊断X射线图像上的COVID-19。 …

ad域管理与维护_U-Mail邮件系统LDAP/AD同步极大提升办公效率

每一位办公族&#xff0c;可能都遇到过这样的问题&#xff1a;1、随着信息化高速发展和企业“互联网”的深入&#xff0c;越来越多的办公平台和软件被开发出来&#xff0c;正如移动互联网端APP应用层出不穷一样&#xff0c;给人们带来了极大地便利性。2、凡事有利有弊&#xff…