简单的三步vuex入门


Posted in Javascript onMay 20, 2018

前言

之前几个项目中,都多多少少碰到一些组件之间需要通信的地方,而因为种种原因,
event bus 的成本反而比vuex还高, 所以技术选型上选用了 vuex, 但是不知道为什么,
团队里的一些新人一听到vuex,就开始退缩了, 因为vuex 很难? 真的很难吗?
今天我们用简单的3步来证明一下,vuex有多简单.

纯属个人经验,难免有不正确的地方,如有发现,欢迎指正!

这是一个针对新手的入门级教程、入门级教程、入门级教程

第零步

新建一个vue项目,安装vuex,这里不做过多介绍,能点进来的,默认你具备这些技能 ^_^

第一步

新建一个.js 文件,名字位置任意,按照惯例,建议在/src/store 目录下(没有的话自己新建一个呗)

文件位置 /src/store/index.js

// 引入vue 和 vuex
import Vue from 'vue'
import Vuex from 'vuex'

// 这里需要use一下,固定写法,记住即可
Vue.use(Vuex)

// 直接导出 一个 Store 的实例
export default new Vuex.Store({
 // 类似 vue 的 data
 state: {
 name: 'oldName'
 },
 // 类似 vue 里的 mothods(同步方法)
 mutations: {
 updateName (state) {
  state.name = 'newName'
 }
 }
})

代码看起来稍微有那么一点点多,不过看起来是不是很熟悉? 跟普通的 vue 没多大差别嘛.

这一步其实就是新建一个store,但是我们还没在项目中使用.

第二步

在入口文件引入上述文件, 并稍微改一下传给 new Vue()的参数,新增的行后面有备注

文件位置 /src/main.js (vue-cli自动生成的入口,如果你能不用脚手架,那么也就不需要我说明了)

import Vue from 'vue'
import App from './App'
import vuexStore from './store' // 新增

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

Tip: import store from './store' 后面的地址,就是上面我们新建那个文件的位置(/src/store/index.js),
因为我这里是index.js,所以可以省略.

第三步

以上2步,其实已经完成了vuex的基本配置,接下来就是使用了

文件位置 /src/main.js (同样是vue-cli生成的app.vue,这里为了方便演示,我去掉多余的代码)

<template>
 <div>
 {{getName}}
 <button @click="changeName" value="更名">更名</button>
 </div>
</template>

<script>
import HelloWorld from './components/HelloWorld'

export default {
 computed:{
 getName(){
  return this.$store.state.name
 }
 },
 methods:{
 changeName () {
  this.$store.commit('updateName')
 }
 }
}
</script>

这里就是一个很普通的vue文件了,有区别的地方是这里我们需要用computed属性去获取 store 里的 "data"

还有就是我们要改变数据的话,不再用 this.xxx = xxx 改成 this.$store.commit('updateName')

总结

你可能会觉得,上例这样做的意义何在,为何不直接用vue的data跟methods?

上例只是为了简单讲解如何使用vuex,所以简化了一些流程,试想一下,如果你有这样一个页面:

一共嵌套了10层组件(即子组件里面还有子子组件,子子组件下面还有子子子组件,以此类推10层)

然后最后一层组件一个数据改变了,要通知第一层组件的时候,我们只需在最底层组件里this.$store.commit(),

然后再最外层组件上用computed属性获取对应的值,就能做到实时更新.无需层层$emit上去.

最后

本来想在最后再扩展一下getter,action+dispatch,模块化等等,不过为了对得起这个标题。

分享给大家本文介绍的源码:https://github.com/noahlam/articles

Javascript 相关文章推荐
让iframe框架网页在任何浏览器下自动伸缩
Aug 18 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
Oct 23 Javascript
javascript获取xml节点的最大值(实现代码)
Dec 11 Javascript
JS去除字符串两端空格的简单实例
Dec 27 Javascript
AngularJS基础 ng-include 指令简单示例
Aug 01 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
Sep 01 Javascript
js实现九宫格的随机颜色跳转
Feb 19 Javascript
简单谈谈axios中的get,post方法
Jun 25 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
Aug 16 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
Sep 06 jQuery
详解vue组件中使用路由方法
Feb 12 Javascript
js实现简易计算器小功能
Nov 18 Javascript
vue项目如何刷新当前页面的方法
May 18 #Javascript
原生JS实现的碰撞检测功能示例
May 18 #Javascript
JS实现json对象数组按对象属性排序操作示例
May 18 #Javascript
vue.js使用3DES加密的方法示例
May 18 #Javascript
JS实现的3des+base64加密解密算法完整示例
May 18 #Javascript
JS实现调用本地摄像头功能示例
May 18 #Javascript
React全家桶环境搭建过程详解
May 18 #Javascript
You might like
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
javascript removeChild 使用注意事项
2009/04/11 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
PyQt5响应回车事件的方法
2019/06/25 Python
python实现飞机大战小游戏
2019/11/08 Python
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
法院实习人员自我鉴定
2013/09/26 职场文书
材料物理专业大学毕业生求职信
2013/10/15 职场文书
个人承诺书
2014/03/26 职场文书
公司经理任命书
2014/06/05 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
社区党员干部承诺书
2015/05/04 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
asyncio异步编程之Task对象详解
2022/03/13 Python