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实现pager控件示例
Apr 09 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
Apr 16 Javascript
js实现简单选项卡与自动切换效果的方法
Apr 10 Javascript
AngularJS+Node.js实现在线聊天室
Aug 28 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 Javascript
React-Router如何进行页面权限管理的方法
Dec 06 Javascript
关于Vue单页面骨架屏实践记录
Dec 13 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 Javascript
Vue 自定义动态组件实例详解
Mar 28 Javascript
JavaScript实现封闭区域布尔运算的示例代码
Jun 25 Javascript
Vue2.0生命周期的理解
Aug 20 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
Mar 27 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
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
js正确获取元素样式详解
2009/08/07 Javascript
ext 代码生成器
2009/08/07 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
Python 代码性能优化技巧分享
2012/08/07 Python
在Python中使用HTML模版的教程
2015/04/29 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
python实现画圆功能
2018/01/25 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
如何利用python查找电脑文件
2018/04/27 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Django 全局的static和templates的使用详解
2019/07/19 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
简述 Python 的类和对象
2020/08/21 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
大学生自我鉴定
2013/12/08 职场文书
班级年度安全计划书
2014/05/01 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
学期个人工作总结
2015/02/13 职场文书
雷锋观后感
2015/06/10 职场文书