Vue 与 Vuex 的第一次接触遇到的坑


Posted in Javascript onAugust 16, 2018

在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式

但是如果是大型项目,很多时候都需要在子组件之间传递数据,使用之前的方式就不太方便。Vue 的状态管理工具 Vuex 完美的解决了这个问题。

一、安装并引入 Vuex

项目结构:

Vue 与 Vuex 的第一次接触遇到的坑

首先使用 npm 安装 Vuex

cnpm install vuex -S 

然后在 main.js 中引入

import Vue from 'vue'
import App from './App'
import Vuex from 'vuex'
import store from './vuex/store'
Vue.use(Vuex)
/* eslint-disable no-new */
new Vue({
 el: '#app',
 store,
 render: h => h(App)
})

二、构建核心仓库 store.js

Vuex 应用的状态 state 都应当存放在 store.js 里面,Vue 组件可以从 store.js 里面获取状态,可以把 store 通俗的理解为一个全局变量的仓库。

但是和单纯的全局变量又有一些区别,主要体现在当 store 中的状态发生改变时,相应的 vue 组件也会得到高效更新。

在 src 目录下创建一个 vuex 目录,将 store.js 放到 vuex 目录下

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
 // 定义状态
 state: {
 author: 'Wise Wrong'
 }
})
export default store

这是一个最简单的 store.js,里面只存放一个状态 author

虽然在 main.js 中已经引入了 Vue 和 Vuex,但是这里还得再引入一次

三、将状态映射到组件

<template>
 <footer class="footer">
 <ul>
  <li v-for="lis in ul">{{lis.li}}</li>
 </ul>
 <p>
  Copyright © {{author}} - 2016 All rights reserved
 </p>
 </footer>
</template>
<script>
 export default {
 name: 'footerDiv',
 data () {
  return {
  ul: [
   { li: '琉璃之金' },
   { li: '朦胧之森' },
   { li: '缥缈之滔' },
   { li: '逍遥之火' },
   { li: '璀璨之沙' }
  ]
  }
 },
 computed: {
  author () {
  return this.$store.state.author
  }
 }
 }
</script>

这是 footer.vue 的 html 和 script 部分

主要在 computed 中,将 this.$store.state.author 的值返回给 html 中的 author

页面渲染之后,就能获取到 author 的值 

Vue 与 Vuex 的第一次接触遇到的坑

四、在组件中修改状态

然后在 header.vue 中添加一个输入框,将输入框的值传给 store.js 中的 author

这里我使用了 Element-UI 作为样式框架

Vue 与 Vuex 的第一次接触遇到的坑

上面将输入框 input 的值绑定为 inputTxt,然后在后面的按钮 button 上绑定 click 事件,触发 setAuthor 方法

methods: {
 setAuthor: function () {
 this.$store.state.author = this.inpuTxt
 }
}

在 setAuthor 方法中,将输入框的值 inputTxt 赋给 Vuex 中的状态 author,从而实现子组件之间的数据传递

Vue 与 Vuex 的第一次接触遇到的坑

五、官方推荐的修改状态的方式

上面的示例是在 setAuthor 直接使用赋值的方式修改状态 author,但是 vue 官方推荐使用下面的方法:

Vue 与 Vuex 的第一次接触遇到的坑

首先在 store.js 中定义一个方法 newAuthor,其中第一个参数 state 就是 $store.state,第二个参数 msg 需要另外传入

然后修改 header.vue 中的 setAuthor 方法

Vue 与 Vuex 的第一次接触遇到的坑

这里使用 $store.commit 提交 newAuthor,并将 this.inputTxt 传给 msg,从而修改 author

这样显式地提交(commit) mutations,可以让我们更好的跟踪每一个状态的变化,所以在大型项目中,更推荐使用第二种方法。

总结

以上所述是小编给大家介绍的Vue 与 Vuex 的第一次接触遇到的坑,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery Easyui Tree的oncheck事件实现代码
May 28 Javascript
jquery Mobile入门—外部链接切换示例代码
Jan 08 Javascript
javascript获取本机操作系统类型的方法
Aug 13 Javascript
jQuery+json实现动态创建复杂表格table的方法
Oct 25 Javascript
Bootstrap选项卡动态切换效果
Nov 28 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
Dec 31 Javascript
vue项目中定义全局变量、函数的几种方法
Nov 08 Javascript
vue2.x 对象劫持的原理实现
Apr 19 Javascript
jQuery 动画与停止动画效果实例详解
May 19 jQuery
JavaScript缓动动画函数的封装方法
Nov 25 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
Feb 06 Javascript
深入理解Vue 组件之间传值
Aug 16 #Javascript
JS加密插件CryptoJS实现的Base64加密示例
Aug 16 #Javascript
vue中引用swiper轮播插件的教程详解
Aug 16 #Javascript
JS加密插件CryptoJS实现的DES加密示例
Aug 16 #Javascript
JS加密插件CryptoJS实现AES加密操作示例
Aug 16 #Javascript
实例详解vue.js浅度监听和深度监听及watch用法
Aug 16 #Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
Aug 16 #Javascript
You might like
星际争霸中的对战模式介绍
2020/03/04 星际争霸
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
python编写猜数字小游戏
2019/10/06 Python
Python字节单位转换实例
2019/12/05 Python
python实现邮件循环自动发件功能
2020/09/11 Python
报关报检委托书
2014/04/08 职场文书
《春雨》教学反思
2014/04/24 职场文书
劳动竞赛口号
2014/06/16 职场文书
企业年检委托书范本
2014/10/14 职场文书
运动会加油稿30字
2015/07/21 职场文书
公司考勤管理制度
2015/08/04 职场文书
心理健康教育主题班会
2015/08/13 职场文书
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL