首页 > 其他分享 >vuex的使用

vuex的使用

时间:2022-12-22 11:36:42浏览次数:67  
标签:name vuex mutations state 使用 数据 store

1,vuex是什么:

vuex是一个专门为vue开发的状态管理工具,它采用集中式存储管理应用的所有组件的状态,其核心是state。

2,vuex中有什么:

1)state:存放状态数据的地方,其中数据是响应式的,数据改变对应组件的数据也会跟新改变,禁止直接改变state中的数据否则

      数据无法被调试工具监测。

2)getter:可理解为store的计算属性,能读取state中的数据。

3)mutations:装着处理数据逻辑方法的集合体,是该改变state中数据的唯一方法,修改数据是同步的。

4)actions:提交mutations修改数据,与mutations功能类似,但修改数据是异步的。

5)modules:当store过于臃肿时,可使用modules将store分割成模块,每个模块中都有自己的state、getter、mutations、

      actions

3,vuex使用示例

场景:将store中的数据在ComOne组件中渲染出来,在ComTwo组件中分别同步异步修改。
1)一般使用"vue create xxx"命令创建的项目的默认选项是自带vuex的,无需手动添加。
2)vuex的各种状态和方法是写在src下的store里的index.js中的。
3)在state中存入需要共用的数据:

 4)在store中分别写出vuex的getters、mutations、action(modules在数据臃肿时也可将之模块化写出):

 5)在ComOne中导入vuex中的辅助函数mapState与mapGetters:

 6)在ComOne中用辅助函数映射出vuex的state与getters作为计算属性:

 7)在页面直接使用映射出的数据:

 8)在ComTwo中导入修改vuex数据的辅助函数mapMutations与mapActions:

 9)在ComTwo中使用辅助函数生成修改vuex对应数据的方法:

 10)直接在页面中通过回车事件触发修改vuex的方法:

 11)在第一行输入框中输入数据按下回车后name与age会立刻更新修改(同步),在第二行输入框中输入数据按下回车后name与age

        会等待一秒后更新修改(异步)。

 4,具体实现代码

store的index.js:

 1 import Vue from 'vue'
 2 import Vuex from 'vuex'
 3 
 4 Vue.use(Vuex)
 5 
 6 export default new Vuex.Store({
 7   //state存放状态,
 8   state: {
 9     name: "tom",//需要共用的数据
10     age: "22"
11   },
12   //getter为state的计算属性
13   getters: {
14     getName: (state) => state.name,//获取name
15     getAge: (state) => state.age,
16   },
17   //mutations可更改状态的逻辑,同步操作
18   mutations: {
19     setName: (state, data) => state.name = data,
20     setAge: (state, data) => state.age = data,
21   },
22   //提交mutation,异步操作
23   actions: {
24     acSetName(context, name) {
25       setTimeout(() => {
26         //延时1秒提交至mutations中的方法
27         context.commit("setName", name);
28       }, 1000);
29     },
30 
31     acSetAge(context, age) {
32       setTimeout(() => {
33         context.commit("setAge", age);
34       }, 1000);
35     }
36   },
37   // 将store模块化
38   modules: {
39   }
40 })

ComOne.vue:

 1 <template>
 2   <div class="wrapper">
 3     <!--读取mapGetters中的getName与getAge-->
 4     <div>
 5       name:<span>{{ getName }}</span>
 6     </div>
 7     <div>
 8       age:<span>{{ getAge }}</span>
 9     </div>
10   </div>
11 </template>
12 
13 <script>
14 import { mapState, mapGetters } from "vuex"; //导入vuex的辅助函数
15 export default {
16   components: {},
17   //计算属性computed无法传递参数
18   computed: {
19     // 映射 state 中的数据为计算属性
20     ...mapState(["name", "age"]),
21     // 映射 getters 中的数据为计算属性
22     ...mapGetters(["getName", "getAge"]),
23   },
24 };
25 </script>
26 <style scoped>
27 .wrapper {
28   color: #fff;
29 }
30 </style>

ComTwo.vue:

 1 <template>
 2   <div class="wrapper">
 3     <div>
 4       <span>同步修改:</span>
 5       <!--直接回车调用mapMutations中的setName方法与setAge方法-->
 6       <input
 7         v-model="nameInp"
 8         @keydown.enter="setName(nameInp)"
 9         placeholder="同步修改name"
10       />
11       <input
12         v-model="ageInp"
13         @keydown.enter="setAge(ageInp)"
14         placeholder="同步修改age"
15       />
16     </div>
17 
18     <div>
19       <span>异步修改:</span>
20       <!--直接回车调用mapAtions中的acSetName方法与acSetAge方法-->
21       <input
22         v-model="acNameInp"
23         @keydown.enter="acSetName(acNameInp)"
24         placeholder="异步修改name"
25       />
26       <input
27         v-model="AcAgeInp"
28         @keydown.enter="acSetAge(AcAgeInp)"
29         placeholder="异步修改age"
30       />
31     </div>
32   </div>
33 </template>
34 
35 <script>
36 import { mapMutations, mapActions } from "vuex"; //导入vuex的辅助函数
37 export default {
38   components: {},
39   data() {
40     return {
41       nameInp: "", //绑定输入框的值
42       ageInp: "",
43       acNameInp: "",
44       AcAgeInp: "",
45     };
46   },
47   methods: {
48     //用于生成与 mutations 对话的方法,即:包含 $store.commit(xx) 的函数
49     ...mapMutations(["setName", "setAge"]),
50     //用于生成与 actions 对话的方法,即:包含 $store.dispatch(xx) 的函数
51     ...mapActions(["acSetName", "acSetAge"]),
52   },
53 };
54 </script>
55 <style scoped>
56 .wrapper {
57 }
58 </style>

 

标签:name,vuex,mutations,state,使用,数据,store
From: https://www.cnblogs.com/fxw1996/p/16997995.html

相关文章

  • json字符串不规范 怎么使用parse反序列化
    json不规范亲人两行泪varmyJsonStr="{name:'张三','age':20}";//甚至有的key还是双引号引号都不统一JSON.parse(myJsonStr);//报错:myJsonStr不是一个有效的J......
  • vue中如何使用prismjs
    安装yarnaddprismjs使用<template>...</template><scriptsetuplang="ts">importPrismfrom'prismjs';import'prismjs/themes/prism.css';Prism.highli......
  • SpringBoot入门三十一,多数据源的使用
    一、环境配置项目基本配置参考​​SpringBoot入门一,使用myEclipse新建一个SpringBoot项目​​,使用MyEclipse新建一个SpringBoot项目即可,数据源使用MyBatis。下面开始多数......
  • 使用 Pivotal GemFire 缓存数据
    本指南将介绍使用ApacheGeode的数据管理系统,用于缓存来自应用程序代码的某些调用。有关ApacheGeode概念和从ApacheGeode访问数据的更多一般知识,请通读本指南,使用Apa......
  • 使用非侵入式事务包装数据库操作
    本指南将引导您完成使用非侵入式事务包装数据库操作的过程。您将构建什么您将构建一个简单的JDBC应用程序,其中您无需编写即可使数据库操作成为事务性操作专用JDBC代码.......
  • 使用 Spring Data JPA 在关系数据库中存储和检索数据
    本指南将引导您完成构建应用程序的过程,该应用程序使用SpringDataJPA在关系数据库中存储和检索数据。您将构建什么您将构建一个应用程序,用于在基于内存的数据库中存储PO......
  • 使用 MongoDB 访问数据
    本指南将引导您完成使用过程春季数据MongoDB​构建一个存储数据并从中检索数据的应用程序蒙戈数据库,一个基于文档的数据库。您将构建什么您将使用SpringDataMongoDB将......
  • 在React中使用CSS Modules
    1.为什么使用CSSModules?在React中,如果你直接在文件中引入index.css,当父组件和子孙组件的class属性相同时,那么会发生CSS样式覆盖的问题。如果解决样式覆盖的问......
  • Djagno 使用locals()
    Django使用locals()函数locals()函数会以字典类型返回当前位置的全部局部变量在views.py中添加#展示classGoods_list(View):defget(self,request):g......
  • 使用受 Spring 安全性保护的资源创建简单 Web 应用程序
    本指南将引导您完成使用受Spring安全性保护的资源创建简单Web应用程序的过程。您将构建什么您将构建一个SpringMVC应用程序,该应用程序使用由固定用户列表支持的登录表......