详解Vue爬坑之vuex初识


Posted in Javascript onJune 14, 2017

在 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,可以让我们更好的跟踪每一个状态的变化,所以在大型项目中,更推荐使用第二种方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript使用prototype定义对象类型
Feb 07 Javascript
为指定元素增加样式的js代码
Dec 09 Javascript
jQuery的一些特性和用法整理小结
Jan 13 Javascript
WEB高性能开发之疯狂的HTML压缩
Jun 19 Javascript
js最简单的拖拽效果实现代码
Sep 24 Javascript
iframe父页面获取子页面参数的方法
Feb 21 Javascript
JS JQUERY实现滚动条自动滚到底的方法
Jan 09 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 Javascript
js实现一个简单的数字时钟效果
Mar 29 Javascript
详解webpack中的hash、chunkhash、contenthash区别
Jan 05 Javascript
iView框架问题整理小结
Oct 16 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 #Javascript
微信小程序调用PHP后台接口 解析纯html文本
Jun 13 #Javascript
vue时间格式化实例代码
Jun 13 #Javascript
详解vue slot插槽的使用方法
Jun 13 #Javascript
详解Vue.js分发之作用域槽
Jun 13 #Javascript
Javascript实现从小到大的数组转换成二叉搜索树
Jun 13 #Javascript
微信小程序实现移动端滑动分页效果(ajax)
Jun 13 #Javascript
You might like
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
php 表单验证实现代码
2009/03/10 PHP
组合算法的PHP解答方法
2012/02/04 PHP
PHP中extract()函数的定义和用法
2012/08/17 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
python进程与线程小结实例分析
2018/11/11 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
精通Javascript系列之数值计算
2011/06/07 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
django的model操作汇整详解
2019/07/26 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
Python wordcloud库安装方法总结
2020/12/31 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
建筑专业自我鉴定
2013/10/22 职场文书
法学毕业生自我鉴定
2013/11/08 职场文书
创业计划书如何吸引他人眼球
2014/01/10 职场文书
培训自我鉴定
2014/01/31 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
人力资源作业细则
2014/03/03 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
党员对照检查材料
2014/09/22 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
利用Python实现模拟登录知乎
2022/05/25 Python