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 相关文章推荐
javascript function调用时的参数检测常用办法
Feb 26 Javascript
JS逆序遍历实现代码
Dec 02 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
Dec 08 Javascript
js实现的下拉框二级联动效果
Apr 30 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
Jul 18 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
Nov 14 jQuery
微信小程序多音频播放进度条问题
Aug 28 Javascript
JS函数内部属性之arguments和this实例解析
Oct 07 Javascript
微信小程序日历弹窗选择器代码实例
May 09 Javascript
微信小程序登录态和检验注册过没的app.js写法
May 22 Javascript
Vue 实现前进刷新后退不刷新的效果
Jun 14 Javascript
微信小程序APP页面的之间的相互传递参数以及自定义组件
Apr 19 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
sql注入与转义的php函数代码
2013/06/17 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
javascript parseInt 大改造
2009/09/27 Javascript
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
JS判断数组那点事
2017/10/10 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
python学习必备知识汇总
2017/09/08 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
IBatis持久层技术
2016/07/18 面试题
教师实习自我鉴定
2013/12/14 职场文书
电子信息专业自荐书
2014/02/04 职场文书
美术指导助理求职信
2014/04/20 职场文书
说明书怎么写
2014/05/06 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
地雷战观后感
2015/06/09 职场文书