简单的三步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 相关文章推荐
nicejforms——美化表单不用愁
Feb 20 Javascript
JS+XML 省份和城市之间的联动实现代码
Oct 14 Javascript
javascript实现的DES加密示例
Oct 30 Javascript
使用GruntJS构建Web程序之合并压缩篇
Jun 06 Javascript
JavaScript中对JSON对象的基本操作示例
May 21 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
Sep 21 Javascript
jQuery实现复制到粘贴板功能
Feb 11 Javascript
JavaScript编写一个贪吃蛇游戏
Mar 09 Javascript
详解js的作用域、预解析机制
Feb 05 Javascript
vue组件中使用props传递数据的实例详解
Apr 08 Javascript
微信小程序实现手势滑动卡片效果
Aug 26 Javascript
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
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中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
php三元运算符知识汇总
2015/07/02 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
Python运算符重载用法实例分析
2015/06/01 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
python中sys模块是做什么用的
2020/08/16 Python
Python接口自动化测试的实现
2020/08/28 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技