详解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 相关文章推荐
js格式化时间和js格式化时间戳示例
Feb 10 Javascript
javascript数组详解
Oct 22 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
Oct 30 Javascript
node中socket.io的事件使用详解
Dec 15 Javascript
js树插件zTree获取所有选中节点数据的方法
Jan 28 Javascript
JavaScript表格常用操作方法汇总
Apr 15 Javascript
JavaScript中的toLocaleDateString()方法使用简介
Jun 12 Javascript
JavaScript模拟鼠标右键菜单效果
Dec 08 Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
Sep 30 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
Sep 06 Javascript
react使用antd表单赋值,用于修改弹框的操作
Oct 29 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
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
python中使用PIL制作并验证图片验证码
2018/03/15 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
pandas.cut具体使用总结
2019/06/24 Python
Django框架安装方法图文详解
2019/11/04 Python
python程序文件扩展名知识点详解
2020/02/27 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
财务主管的岗位职责
2013/12/30 职场文书
大学生学业生涯规划
2014/01/05 职场文书
乌鸦喝水教学反思
2014/02/07 职场文书
优秀员工评语
2014/02/10 职场文书
三年级学生评语
2014/04/23 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
小学生学习保证书
2015/02/26 职场文书
雨雪天气温馨提示
2015/07/15 职场文书