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常用运算符(Operators)-javascript基础教程
Dec 14 Javascript
解javascript 混淆加密收藏
Jan 16 Javascript
jquery中输入验证中一个不错的效果
Aug 21 Javascript
javascript中使用正则计算中文长度的例子
Apr 29 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
JS实现超简单的鼠标拖动效果
Nov 02 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
Mar 16 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
Jun 20 jQuery
一步步教会你微信小程序的登录鉴权
Apr 09 Javascript
vue路由中前进后退的一些事儿
May 18 Javascript
vue 开发之路由配置方法详解
Dec 02 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
Oct 29 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
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
python使用cPickle模块序列化实例
2014/09/25 Python
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
python的keyword模块用法实例分析
2015/06/30 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
应届大学生求职的自我评价
2013/11/17 职场文书
护士思想汇报
2014/01/12 职场文书
大学自我评价
2014/02/12 职场文书
秸秆管理实施方案
2014/03/15 职场文书
远程网络教育毕业生自我鉴定
2014/04/14 职场文书
2014年三万活动总结
2014/04/26 职场文书
教师个人年终总结
2015/02/11 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫
一文搞懂Java中的注解和反射
2022/06/21 Java/Android