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 ui dialog里调用datepicker的问题
Aug 06 Javascript
DIV菜单层实现代码
Nov 19 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
Aug 31 Javascript
jQuery+PHP星级评分实现方法
Oct 02 Javascript
每天一篇javascript学习小结(面向对象编程)
Nov 20 Javascript
jQuery的内容过滤选择器学习教程
Apr 18 Javascript
详解vuex 中的 state 在组件中如何监听
May 23 Javascript
微信小程序实现倒计时60s获取验证码
Apr 17 Javascript
javascript实现电脑和手机版样式切换
Nov 10 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
JavaScript使用闭包模仿块级作用域操作示例
Jan 21 Javascript
详解JQuery基础动画操作
Apr 12 jQuery
深入理解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的简易冒泡法代码分享
2012/08/28 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
Python修改MP3文件的方法
2015/06/15 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Python OpenCV获取视频的方法
2018/02/28 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
斯福泰克软件测试面试题
2015/02/16 面试题
责任书范本
2014/08/25 职场文书
毕业证代领委托书
2014/09/26 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
世界地球日活动总结
2015/02/09 职场文书
2015年工会工作总结
2015/03/30 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书