简单的三步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 相关文章推荐
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
Sep 12 Javascript
Dom 是什么的详细说明
Oct 25 Javascript
一个JS函数搞定网页标题(title)闪动效果
May 13 Javascript
JavaScript匿名函数用法分析
Feb 13 Javascript
JS检测数组类型的方法小结
Mar 14 Javascript
微信小程序实战之自定义toast(6)
Apr 18 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
Sep 12 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
Nov 11 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
Jul 10 Javascript
详解Vue中watch对象内属性的方法
Feb 01 Javascript
通过vue手动封装on、emit、off的代码详解
May 29 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
Apr 30 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
PHPCMS的使用小结
2010/09/20 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
PHP date()格式MySQL中插入datetime方法
2019/01/29 PHP
php测试kafka项目示例
2020/02/06 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
js 表格隔行颜色
2009/12/02 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Python元字符的用法实例解析
2018/01/17 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
Python类中self参数用法详解
2020/02/13 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
Python 解析简单的XML数据
2020/07/24 Python
描述内存分配方式以及它们的区别
2016/10/15 面试题
DELPHI面试题研发笔试试卷
2015/11/08 面试题
实习评语
2013/12/16 职场文书
幼儿教师国培感言
2014/02/19 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
房屋出租委托书格式
2014/09/23 职场文书
如何写好开幕词?
2019/06/24 职场文书
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL