简单的三步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 相关文章推荐
制作特殊字的脚本
Jun 26 Javascript
Jquery中给animation加更多的运作效果实例
Sep 05 Javascript
js call方法详细介绍(js 的继承)
Nov 18 Javascript
node.js中的http.get方法使用说明
Dec 14 Javascript
javascript制作的简单注册模块表单验证
Apr 13 Javascript
swtich/if...else的替代语句
Aug 16 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
Jul 24 Javascript
微信小程序工具函数封装
Oct 28 Javascript
vue 查看dist文件里的结构(多种方式)
Jan 17 Javascript
基于JavaScript实现轮播图效果
Jan 02 Javascript
微信小程序onShareTimeline()实现分享朋友圈
Jan 07 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程序中防止盗链
2008/04/09 PHP
PHP 分页类(模仿google)-面试题目解答
2009/09/13 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python模块学习 re 正则表达式
2011/05/19 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
mac下如何将python2.7改为python3
2018/07/13 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
一套带网友答案的.NET笔试题
2016/12/06 面试题
材料采购员岗位职责
2013/12/17 职场文书
高中语文教学反思
2014/01/16 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
节能减耗标语
2014/06/21 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
教师工作失职检讨书
2014/09/18 职场文书
钱学森电影观后感
2015/06/04 职场文书
2016年安全月活动总结
2016/04/06 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
gateway网关接口请求的校验方式
2021/07/15 Java/Android
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android