详解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 相关文章推荐
学习ExtJS fit布局使用说明
Oct 08 Javascript
通过JavaScript控制字体大小的代码
Oct 04 Javascript
在页面加载完成后通过jquery给多个span赋值
May 21 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
May 14 Javascript
Highcharts入门之基本属性
Aug 02 Javascript
js仿腾讯QQ的web登陆界面
Aug 19 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
Vue.js中兄弟组件之间互相传值实例
Jun 01 Javascript
vue src动态加载请求获取图片的方法
Oct 17 Javascript
JS实现的tab页切换效果完整示例
Dec 18 Javascript
深入解析vue 源码目录及构建过程分析
Apr 24 Javascript
vue2.0自定义指令示例代码详解
Apr 25 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
PHP基础知识介绍
2013/09/17 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
php实现的简单日志写入函数
2015/03/31 PHP
php两种无限分类方法实例
2015/04/21 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
js获取图片长和宽度的代码
2009/11/24 Javascript
网页图片延时加载的js代码
2010/04/22 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python编程argparse入门浅析
2018/02/07 Python
Python格式化日期时间操作示例
2018/06/28 Python
python通过http下载文件的方法详解
2019/07/26 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
内业资料员岗位职责
2014/01/04 职场文书
房地产开发项目建议书
2014/05/16 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
体育教师个人总结
2015/02/09 职场文书
纪委立案决定书
2015/06/24 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS