文章目录

  • State
  • Getters
  • Mutation
  • Actions


这是Vuex官方给出的图片,看起来有点不好理解,上详解!!!!
开始介绍之前,我们需要将Vuex挂载到Vue实例上面,这样我们才能在Vue的所有组件中都可以使用这些数据,这里我们store文件夹下面的index.js存放我们的Vuex代码。
记得在入口文件main.js里面导入store对象

State

暂时可以将他看作是data中的属性,也就是我们当前的状态。
state里面的这些属性都会被加入到响应式系统里面,而响应式系统会监听属性的变化,一旦属性发生变化,会通知所有用到这个属性的界面并进行刷新。
但有一个前提,所有的属性都必须先初始化好,如果直接在mutations里面添加一个新的属性,界面是不会显示的。

//Vuex
const store = new Vuex.Store({sate:{count: 0},mutations:{increament(state){state.count ++},decreament(state){state.count --}}
})//App.vue
<template><div id="app"><p>{{count}}</p><button @click="increment">+1</button><button @ click="decrement">-1</button></div>
</template>
<script>
export default {name:' App', components:{}, computed:{count: function(){//可以通过$this.$store.sate访问Vuex里面state的状态return this. $store.state.count }
},methods:{increment: function ){//通过this.Store.commit(mutations中的方法)来修改状态this. Sstore. commit(' increment')}, decrement: function ){this. Sstore. commit(' decrement')}

Getters

有时候我们需要获取一些state变异后的状态,就需要使用到我们的Getters了,有点类似于我们的computed计算属性

  1. 我们想要获取students数组里面年龄大于20的数据,我们可以适应computed属性获取,但是我们想要在多个页面获取变化后的数据,就需要在每一个组件里面都添加一个计算属性,效率极低!!!Getters该出场了!!!!
//Vuex
const store = new Vuex.Store({sate:{students:[{id:110,name:'zhangsan',age:18},{id:111,name:'lisi',age:21},{id:112,name:'wangwu',age:25},]},getters:{//这样我们就获取到了年龄大于20的数据,在需要的组件直接展示即可getmore20:state => return state.students.filter(s => s.age > 20)}
})
  1. getters默认是不能传递参数的,如果我们希望她能传递一个参数,我们只能让getters本身返回另一个函数
    我们想要获取年龄大于20的个数
//Vuex
getters:{//1.我们可以直接添加length:{{getmore20.length}}获取getmore20(state){return state.students.filter(s => s.age > 20)}//2.将getters作为一个参数传递getmore20Len(state,getters){return getters.getmore20.length}//3.我们自定义在组件展示的地方传入一个年龄比如<h2>{{getmoreAge(30)}}</h2>//这里我们想要自定义获取一个年龄大于30的数据getmoreAge(state){return function(age){return state.students.filter(s => s.age >= age)}}}

Mutation

在State里面已经大概了解了Mutations是什么,但是还有很多细节部分

  1. Vuex官方明确:store里面state状态更新的唯一方式就是通过提交Mutations
    2.mutations主要包含两部分:事件类型回调函数
    mutations里面的方法必须是同步的,异步用actions
mutations:{increament(state){state.count ++},
}
//这里的increament被称为时间类型,其余被称为回调函数,state是回调函数的第一个参数//mutations更新的方式就是上文提到的通过this.$store.commit的方式
  1. 当我们需要点击按钮进行数据的+5或者+10 的时候,我们可以自己传入5或者10的参数进行展示。
//App.vue
<button @click="addFive(5)">+5</button>methods:{//1.第一种提交风格,count是一个数字addFive(count){this.$store.commit('addCount',count)}//第二种提交风格,payload是一个对象addFive(count){this.$store.commit({type: 'addCount',count: 5})}
}//Vuex
mutation:{//1.第一种提交风格addCount(state,count){state.counter += count}//第二种提交风格addCount(state,payload){state.counter += payload.count}
}
  1. 向students里面再添加一个学生信息,我们在更新数据的时候,我们可能希望携带一些额外的参数(stu),这个参数被称为mutations的载荷(payload)
//App.vue
<button @click="addStudents">+5</button>methods:{addStudents(){const stu = {id:115,name:'kobe',age:40}this.$store.commit('addStu',stu)}
}//Vuex
mutation:{addStu(state,stu){state.students.push(stu)}
}
  1. 添加和删除非响应式数据
//App.vue<h2>{{$store.state.info}}</h2><button @click="updateInfo">修改信息</button>methods:{updateInfo() {this.$store.commit('updateInfo')}
}//Vuex
state:{info: {name: '张三',age: 40,height: 180}
}
updateInfo(state) {// state.info.address='湖南'  //无效,做不到响应式Vue.set(state.info, 'address', '湖南')// delete state.info.name   //无效,做不到响应式Vue.delete(state.info, 'height')}

Actions

actions类似于mutations,但是是用来代替muations进行异步操作的

  1. 点击按钮之后过一段时间在执行
//Vuexstate :{counter: 1000,
}mutations:{increment(state){state.counter ++}
}
actions:{increament(context){//context:上下文,这里可以理解为store对象setTimeOut(()=>{context.commit('increment')},1000)}
}//App.vue<h2>{{counter}}</h2>
<button @click="increment">异步修改</button>methods:{increment(){this.$store.dispath('increament')//给actions发出一个自定义事件}
}
  1. actions返回的Promise
//Vuexstate :{counter: 1000,
}mutations:{increment(state){state.counter ++}
}
actions:{increament(context){return new Promise((resolve)=>{setTimeOut(()=>{context.commit('increment')resolve()},1000)}})
}//App.vue<h2>{{counter}}</h2>
<button @click="increment">异步修改</button>methods:{increment(){this.$store.dispath('increament').then(res=>{console.log('完成了更新')})}
}

几分钟搞懂Vuex(State,Mutations,Actions)相关推荐

  1. mysql decimal型转化为float_5分钟搞懂MySQL数据类型之数值型DECIMAL类型

    速成指南 5分钟搞懂MySQL数据类型 之数值型--DECIMAL类型 DECIMAL类型的语法:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL].其中M指定的是数字的总位 ...

  2. 一分钟搞懂 微调(fine-tuning)和prompt

    一分钟搞懂 微调fine-tuning和prompt 区别与联系 区别 联系 优缺点 微调的优点 微调的缺点 prompt的优点 prompt的缺点 在CV领域 Reference 大家都是希望让预训 ...

  3. html网页和cgi程序编程,十分钟搞懂什么是CGI

    原文:CGI Made Really Easy,在翻译的过程中,我增加了一些我在学习过程中找到的更合适的资料,和自己的一些理解.不能算是严格的翻译文章,应该算是我的看这篇文章的过程的随笔吧. CGI真 ...

  4. python数据分析建模-十分钟搞懂“Python数据分析”

    原标题:十分钟搞懂"Python数据分析" 引言:本文重点是用十分钟的时间帮读者建立Python数据分析的逻辑框架.其次,讲解"如何通过Python 函数或代码和统计学知 ...

  5. 场内场外交易成本_2分钟搞懂场内场外基金

    一天一个金融知识,是成为投资大神的必要条件.今天我们花2分钟搞懂场内基金和场外基金.基金,既可以场内买又可以场外申购,场内场外这两者有什么区别?场内 场外 场内场外的"场",一般指 ...

  6. 看聊天记录都学不会C语言?太菜了吧》(17)5分钟搞懂指针与多重指针

    若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证. 本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新 ...

  7. 5分钟搞懂用户态,内核态

    5分钟搞懂用户态,内核态 1. 什么是用户态,内核态 用户态就是提供应用程序运行的空间,为了使应用程序访问到内核管理的资源例如CPU,内存,I/O.内核必须提供一组通用的访问接口,这些接口就叫系统调用 ...

  8. 一分钟搞懂JavaME、JavaSE和JavaEE的区别

    一分钟搞懂JavaME.JavaSE和JavaEE的区别 JavaME微缩版 JavaSE标准版 JavaEE企业版 多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(pa ...

  9. 五分钟搞懂什么是红黑树

    五分钟搞懂什么是红黑树(全程图解) 18-09-04 星925 + 关注 献花(2)  收藏 前戏 红黑树,对很多童鞋来说,是既熟悉又陌生.熟悉是因为在校学习期间,准备面试时,这是重点.然后经过多年的 ...

最新文章

  1. oracle监听显示未成功_理解 oracle 的 lsnrctl status
  2. 【渣硕的数学笔记】数值分析
  3. python 写 log
  4. C#实现查找指定端口被哪个进程占用并处理进程及dos命令下操作
  5. Spring Boot 2.0新特性
  6. uva 232 Crossword Answers
  7. selenium自动化案例(二)滑动验证码破解
  8. 软件测试过程中的度量与分析
  9. 用 CSS 实现 Firefox 和 IE 都支持的半透明效果
  10. com.alibaba.android,钉钉(com.alibaba.android.rimet) - 6.0.17 - 应用 - 酷安
  11. 炫龙银魂t1配置_炫龙 银魂T1一键重装系统win10教程
  12. STC12LE5612AD芯片使用心得(五)定时器
  13. IE浏览器在地址栏针对param直接输入中文导致乱码的解决方案
  14. 如何将白鹭引擎开发的游戏通过Egret Native发布到 GooglePlay平台
  15. 什么是地狱回调?解决回调地狱的两种方法
  16. 自动化学报- Teleoperation
  17. 华为自研发操作系统鸿蒙,你知华为芯片“麒麟”之意,又可知自研系统“鸿蒙”之深意?...
  18. Charles系列破解激活License
  19. POI2014Salad Bar
  20. Autojs一些问题解决的方案3 auto.js

热门文章

  1. 一流程序员靠数学,二流程序员靠算法,网友:我是七流靠复制
  2. ALV GRID类型
  3. Android 在PDA扫描枪上的应用
  4. pixijs微信小游戏排行榜开放域开发
  5. 求出1-1/2+1/3-1/....1/100的和
  6. 老北京人推荐的50个秘境景点
  7. 为什么现在我更推荐 pnpm 而不是 npm/yarn?
  8. 微软CEO鲍尔默的一天(组图)
  9. 个人练习小览---《xx机构动态广告》
  10. 厨房净水器哪个牌子好,厨房净水器科普