简单的三步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 相关文章推荐
JQuery 无废话系列教程(二) jquery实战篇上
Jun 23 Javascript
extjs 如何给column 加上提示
Jul 29 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
Jan 18 Javascript
JS实现方向键切换输入框焦点的方法
Aug 19 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
Jan 27 Javascript
用jQuery的AJax实现异步访问、异步加载
Nov 02 Javascript
JS实现按钮颜色切换效果
Sep 05 Javascript
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 jQuery
angularjs实现分页和搜索功能
Jan 03 Javascript
js使用Promise实现简单的Ajax缓存
Nov 14 Javascript
mapboxgl实现带箭头轨迹线的代码
Jan 04 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
smarty实例教程
2006/11/19 PHP
php smarty的预保留变量总结
2008/12/04 PHP
php获取twitter最新消息的方法
2015/04/14 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
js常见表单应用技巧
2008/01/09 Javascript
javascript 读取图片文件的大小
2009/06/25 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
Python3搜索及替换文件中文本的方法
2015/05/22 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
python 字典套字典或列表的示例
2019/12/16 Python
最小二乘法及其python实现详解
2020/02/24 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
高级3D打印市场:Gambody
2019/12/26 全球购物
介绍一下Ruby的特点
2013/01/20 面试题
2014年人事部工作总结
2014/12/03 职场文书
现实表现材料范文
2014/12/23 职场文书
获奖感言一句话
2015/07/31 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server
Pandas搭配lambda组合使用详解
2022/01/22 Python
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers