当前位置: 首页 > news >正文

vuex入门

vuex是个集中式管理数据,在大型的单页网页上用比较好,在小项目上就有点累赘

我用vue-cli建了个脚手架(需要先配置好vue)

vue init webpack-simple vuex-demo

 

根据vuex官方文档,下载vuex

npm i vuex -D

 

准备好后,我们需要在src文件夹下建一个store文件夹来专门存放于vuex相关的文件

——》

 

接下来新建5个js文件(注意:官方说3个,但是5个会分得更细,更好维护),分别如下

根据官方文档,个人理解这几个js文件分别的作用是

1.actions.js    //这个文件是给methods:mapActions提供可调用方法的方法名,真正的运算在mutations里

2.getters.js    //这个文件是给mutations数据用的方法

3.index.js      //这个文件是汇总store文件夹下的所有文件的.

4.mutations.js   //这个文件是给action提供可调用方法的,并且提交所有方法与数据到index.js

5.type.js    //这里是给actions.js提供方法名

 

我做了一个小小的demo,效果如下图

功能:

  从左往右分别是

  按钮1:点击增加1

  按钮2:点击减少2

  按钮3:当为偶数时,才能点击,并增加1

  按钮4:点击后隔1秒后才加1

  按钮5:点击加2

 

代码如下:

  App.vue文件   

 1 <template>
 2   <div id="app">
 3     <h3>welcome vuex</h3>
 4     <button @click="increment">增加</button>
 5     <button @click="decrement">减少</button>
 6     <button @click="clickOdd">偶数才能点击</button>
 7     <button @click="clickAsync">点击异步</button>
 8     <button @click="addtwo">点击加2</button>
 9     <div>
10       现在的数字为:{{count}} 它是{{getOdd}}
11     </div>
12   </div>
13 </template>
14 
15 <script>
16   import {mapGetters,mapActions} from 'vuex'  //从vuex mapGetters,mapActions两兄弟
17
18  export default {
19     computed:mapGetters([ //计算时,获取用了getters里的规则配置的motations那边里的count
20         'count',
21         'getOdd'
22     ]),
23     methods:mapActions([ //获取方法名
24         'increment',
25         'decrement',
26         'clickOdd',
27         'clickAsync',
28         'addtwo'
29       ])
30  }
31 </script>

 

  main.js文件

1 import Vue from 'vue'
2 import App from './App.vue'
3 import store from './store/'   //引入store文件
4 
5 new Vue({
6   el: '#app',
7   store,
8   render: h => h(App)
9 });

 

  actions.js文件

 1 //这个文件是给methods:mapActions提供可调用方法的方法名,真正的运算在mutations里
 2 
 3 
 4 import * as types from './types.js'
 5 //作为一个命名空间,可以用types.xxx的方式使用types里的内容
 6 export default {
 7   increment:({commit})=>{ //处理你要干什么,如异步请求,判断,流程控制,commit是个对象
 8     commit(types.INCREMENT);   //提交方法名
 9   },
10   decrement:({commit})=>{
11     commit(types.DECREMENT)
12   },
13   addtwo:({commit})=>{
14     commit(types.ADDTWO)
15   },
16   //偶数才能点
17   clickOdd:({
18               commit,   //给mapActions提交的
19               state     //状态数据
20      })=>{
21 
22           if(state.mutations.count%2===0){
23             commit(types.INCREMENT);
24         }
25   },
26 
27   //点击异步
28   clickAsync:({commit})=>{
29     new Promise((resolve)=>{
30       setTimeout(function(){
31         commit(types.INCREMENT);
32         resolve();
33       },1000)
34     })
35   }
36 }

 

  getters.js文件

 1 //这个文件是给mutations数据用的方法
 2 
 3 export default {
 4   count:(state)=>{
 5     return state.count
 6   },
 7   getOdd:(state)=>{
 8     return state.count%2===0?'偶数':'奇数'
 9   }
10 }

 

  index.js文件

 1 //这个文件是汇总所有store下的文件的.
 2 
 3 import Vue from 'vue'
 4 import Vuex from 'vuex'
 5 
 6 Vue.use(Vuex);
 7 
 8 import actions from './actions.js';
 9 import mutations from './mutations.js'
10 
11 export default new Vuex.Store({
12   modules:{
13     mutations
14   },
15   actions
16 });

 

  mutations.js文件

 1 //这个文件是给action提供可调用方法的,并且提交所有方法与数据到index.js
 2 
 3 import {INCREMENT,DECREMENT,ADDTWO}from './types.js'
 4 import getters from './getters.js'    //调用getters那边的方法
 5 
 6 
 7 const state={ 
 8   count:10
 9 };
10 
11 const mutations={
12   [INCREMENT](state){ //处理状态(数据)变化  加1
13     state.count++;
14   },
15   [DECREMENT](state){ //处理状态(数据)变化  减1
16     state.count--;
17   },
18   [ADDTWO](state){ //处理状态(数据)变化  加2
19     state.count+=2;
20   }
21 
22 };
23 
24 export default{ //导出相关组件
25   state,
26   mutations,
27   getters
28 }

 

  type.js文件

1 //这里是给actions.js提供方法名
2 
3 export const INCREMENT='INCREMENT';
4 export const DECREMENT='DECREMENT';
5 export const ADDTWO='ADDTWO';

 

说到底,最重要的还是

mapGetters, mapActions 这两兄弟

弄完如果老是报错说哪个方法找不到是unkown Type ,重新run dev一下就行了

 

转载于:https://www.cnblogs.com/grhino/p/8586944.html

相关文章:

  • zookeeper集群的安装
  • Godot-3D教程-02.3D性能和局限性
  • markdown编写技巧
  • vuex 存值 及 取值 的操作
  • java的IO流的一些测试
  • 扒一扒,你有多少校友在阿里?实习就来阿里云。
  • LVS+keepalived+nginx
  • 0/1背包经典例题 入门动态规划
  • HDU 2242 考研路茫茫——空调教室(边双连通)
  • Inno 安装前检测.net framework 4.0
  • MySQL5.7 添加用户、删除用户与授权
  • Puppeteer:浏览器控制器
  • Centos 如何双击执行可执行程序
  • 大幕已拉开,人工智能离我们还有多远?
  • SpringBoot2系列教程(二)maven项目包 (特别完整!)
  • [nginx文档翻译系列] 控制nginx
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Linux CTF 逆向入门
  • MobX
  • Python学习之路16-使用API
  • vue-router 实现分析
  • 大主子表关联的性能优化方法
  • 对象引论
  • 浮现式设计
  • 老板让我十分钟上手nx-admin
  • 少走弯路,给Java 1~5 年程序员的建议
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 数组大概知多少
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 一天一个设计模式之JS实现——适配器模式
  • 一些关于Rust在2019年的思考
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 如何用纯 CSS 创作一个货车 loader
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #if和#ifdef区别
  • (2)Java 简介
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (七)Java对象在Hibernate持久化层的状态
  • (一)appium-desktop定位元素原理
  • (译) 函数式 JS #1:简介
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net Stream篇(六)
  • .NET 设计模式初探
  • .NET 依赖注入和配置系统
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [20140403]查询是否产生日志
  • [20190113]四校联考
  • [C++]拼图游戏
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大