vuex的个人理解

看官方文档看的一脸懵逼,后来看到了一篇比较容易理解的博文,大概写下自己的理解

一、vuex是什么

是基于vue的状态管理模式,一般用于解决大型项目中子组件向父组件传递数据的问题

二、基本概念

1、state

需要使用store的数据存储在state里,并且在组件里通过this.$store.state.xxx访问

import Vue from 'vue'
import vuex from 'vuex'
Vue.use(vuex);export default new vuex.Store({state:{show:false}
})

2、mutations

$store.state.xxx一次只能操作一个state中的数据,如果需要同时操作state中多个数据,就需要使用mutations。

export default {state:{//stateshow:false},mutations:{switch_dialog(state){//这里的state对应着上面这个statestate.show = state.show?false:true;//你还可以在这里执行其他的操作改变state
        }}
}

在组件里,可以通过this.$store.commit('switch_dialog')触发这个事件。官方文档注明,在mutations中的操作必须是同步的,同时mutations是不区分组件的,如果在别的module中存在同名的函数,commit之后会一起触发。

$store.commit()是可以额外传入参数的,提交事件时可以直接传入,也可以选择对象风格

state:{show: false
},
mutations:{switch_dialog(state, n){//载荷state.show = n}
}
//传参的时候可以 this.$store.commit('switch_dialog',true)
//也可以选择对象风格 this.$store.commit({ type: 'switch_dialog' , n: true})

3、module

如果想区分不同组件的state,可以使用module

import Vue from 'vue'
import vuex from 'vuex'
import dialog_store from 'dialog_store.js' //引入对应组件的js文件
Vue.use(vuex);export default new vuex.Store({modules: {dialog: dialog_store  //上面引入的模块
    }
})

这样就可以在对应组件的js文件里管理对应的状态了(dialog_store.js)

export default {state:{show:false}
}

在组件中可以通过this.$store.state.dialog.show访问它

4、action

多个state操作需要通过mutations,那么如果是多个mutations的操作就需要通过action了,另外官方推荐异步操作要放在action里。

export default {state:{//stateshow:false},mutations:{switch_dialog(state){//这里的state对应着上面这个statestate.show = state.show?false:true;//你还可以在这里执行其他的操作改变state
        }},actions:{switch_dialog(context){//这里的context和我们使用的$store拥有相同的对象和方法context.commit('switch_dialog');//你还可以在这里触发其他的mutations方法
        },}
}

在组件里可以通过this.$store.dispatch('switch_dialog')触发事件

5、getters

vuex的getters可以看作是vue中的computed,如果需要对state中某个属性进行额外的运算,可以在getters中进行定义

export default {state:{//stateshow:false},getters:{not_show(state){//这里的state对应着上面这个statereturn !state.show;}},mutations:{switch_dialog(state){//这里的state对应着上面这个statestate.show = state.show?false:true;//你还可以在这里执行其他的操作改变state
        }},actions:{switch_dialog(context){//这里的context和我们使用的$store拥有相同的对象和方法context.commit('switch_dialog');//你还可以在这里触发其他的mutations方法
        },}
}

在组件中,我们可以通过this.$store.getters.not_show获得这个状态,getters中的状态不可以直接进行修改,只能获取它的值

6、mapState、mapAction、mapGetters

如果你觉得上面获取状态的写法this.$store.state.xxx过于麻烦,毕竟我们平时获取一个数据只需要写this.xxx,可以选择使用mapState、mapAction、mapGetters,下面引自上面提到的那篇博文

以mapState为例

<template><el-dialog :visible.sync="show"></el-dialog>
</template><script>
import {mapState} from 'vuex';
export default {computed:{
    ...mapState({show:state=>state.dialog.show}),}
}
</script>

相当于

<template><el-dialog :visible.sync="show"></el-dialog>
</template><script>
import {mapState} from 'vuex';
export default {computed:{show(){return this.$store.state.dialog.show;}}
}
</script>

mapGetters、mapActions 和 mapState 类似 ,mapGetters 一般也写在computed中 , mapActions 一般写在 methods 中。

三、安装和使用方法

安装 vuex :

npm install vuex --save

然后为了方便管理,可以在src/下创建一个store文件夹,创建一个index.js, :

import vuex from 'vuex'
Vue.use(vuex);
var store = new vuex.Store({
    state:{show:false}
})

再然后 , 在实例化 Vue对象时加入 store 对象 :

new Vue({el: '#app',router,store,template: '<App/>',components: { App }
})

完成到这一步 , 上述例子中的 $store.state.show 就可以使用了。

 

转载于:https://www.cnblogs.com/sue7/p/9805384.html

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

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

相关文章

java验证码的代码_java实用验证码的实现代码

本文为大家分享了java实用验证码的实现代码&#xff0c;供大家参考&#xff0c;具体内容如下1、ValidCodepackage validImg;import java.awt.Color;import java.io.IOException;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.Http…

java学习(37):二维数组

/4 利用嵌套循环完成以下二维数组的遍历&#xff0c;体会二维数组或多维数组元素的遍历方法及每个维数数组元素的下标特点。/ import java.util.Scanner; public class test06 { public static void main(String[] args){ Scanner in new Scanner(System.in); System.out.print…

java.util.stream_java.util.stream.Stream 接口中的常用方法

流模型的操作很丰富&#xff0c;下面介绍一些常用的API。这些方法可以被分成两种&#xff1a;延迟方法返回值类型仍然是 Stream 接口自身类型的方法&#xff0c;因此支持链式调用。(除了终结方法外&#xff0c;其余方 法均为延迟方法。)终结方法返回值类型不再是 Stream 接口自…

SRM 698 div1 RepeatString

250pts RepeatString 题意&#xff1a;问最少修改多少次将一个字符串修改为AA的形式。可以插入一个字符&#xff0c;删除一个字符&#xff0c;修改字符。 思路&#xff1a;枚举分界点&#xff0c;然后dp一下。 1 /*2 * Author: mjt3 * Date: 2018-10-17 19:50:164 * Last Mod…

java学习(38):数组排序(直接排序)

/5 有一个长度为10的int类型数组,存储了10个年龄数据,利用Eclipse工具设计一个java控制台程序, 完成将这个int类型数组中年龄进行算法对比,将10个年龄重新存储在新数组中,新数组中存储年龄应符合以下规则: 降序排列 ./ import java.util.Scanner; public class test07 { public…

java学习(39):九九乘法表

public class test08{ public static void main(String[] args){ for(int i1;i<9;i){ System.out.println(); for(int j1;j<i;j){ System.out.print("\t"i""j""(ij)); } } } }

java 私有变量访问_Java - 访问私有实例变量

我需要从以下类列表(Species.java)访问私有变量&#xff0c;以便在KlingonOx.java类中使用它们。KlingonOx.java类的目的是确定大象物种的种群数量将大于克林贡牛种的数量。这是Species.java类&#xff1a;import java.util.Scanner;public class Species{private String name;…

setState是异步还是同步?

react中setState是同步还是异步困扰了好久&#xff0c;今天终于有了答案&#xff1b;它既是同步的&#xff0c;也是异步的&#xff1b; 批量更新&#xff1a; 加入我在页面上写三个setState去分别 componentDidMount() {this.setState({ val: this.state.val 1 }) console.log…

java学习(40):成员实例的定义和访问

定义一个student类 public class student { String name;//输入姓名 int age;//输入年龄 String address;//输入地址 char sex;//输入性别 double height;//输入身高 } 定义一个teststudent类 //成员实例的定义和访问 public class testStudent { public static void main(Stri…

简易计算器 java_终于写出一个简单的计算器了

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import javax.swing.*;import java.awt.event.*;import java.awt.*;import java.util.Scanner;//import java.util.Scanner;public class Jisuanji {JLabel JLabel1;JLabel JLabel2;JLabel JLabel3;//标签JFrame mainJFrame;//布局…

2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)

传送门 听说是最长反链衍生出的对偶定理就能秒了。 本蒟蒻直接用线段树模拟维护的。 对于第一维排序。 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解。代码 转载于:https://www.cnblogs.com/ldxcaicai/p/10084858.html

java学习(41):成员实例的定义和访问续

定义一个studentstudy类 /1 使用Eclipse编写控制台应用程, 编写一个用来表示学生的java类&#xff0c; 并在类中定义描述学生特征的属性&#xff0c;姓名&#xff0c;年龄&#xff0c;性别&#xff0c;身高&#xff0c;体重和电话&#xff0c; 要求属性设置为私有访问级别并为私…

brew 安装 mysql5.7_Mac——brew替换源地址安装配置mysql@5.7版本

问题描述&#xff1a;使用brew方式安装mysql&#xff0c;存在以下问题&#xff1a;1.由于mysql已经升级到8.x版本&#xff0c;会默认安装8.x版本&#xff0c;会对之前部分特性不友好支持&#xff1b;2.brew默认安装源下载响应时间非常慢&#xff0c;下载时间过长容易超时&#…

ftp的本地用户搭建

前期的准备跟虚拟用户一样&#xff0c;就是配置文件不一样 修改配置文件 就是共享的都是自己的账号的家目录&#xff0c;然后启动服务就可以了 本地登陆的都是自己的账号密码 ftp本地的黑名单&#xff0c; 转载于:https://www.cnblogs.com/cash-su/p/9824553.html

java学习(42):巩固练习

定义一个testjava类 /*4 编写一个TestStudentOverrideConstructor.java类&#xff0c; 包含main方法&#xff0c;从控制台接收用户输入的学生信息&#xff0c;包括学生姓名&#xff0c;性别和年龄&#xff0c;使用带参数的构造器创建学生对象并将接收到的输入传递给这个构造器参…

错误解决:常出现在iis搭建网站

不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定 在全新安装的IIS7下搭建网站&#xff0c;访问页面时出现错误信息如下&#xff1a; 配置错误 不能在此路径中使用此配置节。如果在父级别上锁定了该节&#xff0c;便会出现这种情况。锁定是默认…

java收发邮寄_JavaMail收发邮件的一般流程与主要方法

1、Properties属性类Properties p new Properties();p.put(key, value);key-| mail.smtp.host-| mail.smtp.port-| mail.smtp.auth->"true":"false"2、生成Authenticator的子类Overrideprotected PasswordAuthenticationgetPasswordAuthentication(){r…

Java中TreeMap和TreeSet的底层实现

TreeSet底层则采用NavigableMap这个接口来保存TreeSet集合&#xff0c;而实际上NavigableMap只是一个接口&#xff0c;实际上TreeSet还是用TreeMap来保存set元素。 TreeSet初始化的时候会new 一个TreeMap进行初始化&#xff1b; private transient NavigableMap<E,Object>…

oracle 11g数据库数据操作(亲测)

oracle 11g安装和oracle数据库监听配置就不说了&#xff0c;直接说数据库的相关操作 建立 wiicare 用户 create directory dump_dir as ‘d:\test\dump’; 使用 PLSQL Developer 连接数据库 登陆数据库&#xff0c;用户名:system 密码: 123456 连接为&#xff1a;sysdba 新建表…

使用mybatis操作AS400数据库

先简单说一下怎么使用【jt400.jar】连接AS400上的DB2数据库。 ※ jt400.jar资源&#xff0c;如果有安装AS400客户端的话&#xff0c;参考IBM官网 ※ http://www-01.ibm.com/support/docview.wss?uidswg21398042 安装目录下就有jt400.zip&#xff0c;改个后缀就能用了。 如果没…