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开发技术大全-第3章 js数据类型
Jul 03 Javascript
Prototype源码浅析 Number部分
Jan 16 Javascript
jquery中插件实现自动添加用户的具体代码
Nov 15 Javascript
字段太多jquey快速清空表单内容方法
Aug 21 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
Sep 25 Javascript
浅谈React和Redux的连接react-redux
Dec 04 Javascript
基于js文件加载优化(详解)
Jan 03 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
Jun 08 Javascript
浅析vue中的MVVM实现原理
Mar 04 Javascript
js+canvas实现两张图片合并成一张图片的方法
Nov 01 Javascript
微信小程序利用button控制条件标签的变量问题
Mar 15 Javascript
浅谈vue中$bus的使用和涉及到的问题
Jul 28 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数组最大值,最小值的代码
2011/10/31 PHP
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
yepnope.js 异步加载资源文件
2011/09/08 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
js中的面向对象入门
2017/03/06 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
调试Python程序代码的几种方法总结
2015/04/28 Python
Selenium的使用详解
2018/10/19 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
Django中间件基础用法详解
2019/07/18 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
python实现定时发送邮件
2020/12/23 Python
上课迟到检讨书
2014/01/19 职场文书
致长跑运动员广播稿
2014/01/31 职场文书
会务接待方案
2014/02/27 职场文书
房屋维修协议书范本
2014/09/25 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis