详解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 弹出的窗口返回值给父窗口具体实现
Nov 23 Javascript
推荐10个2014年最佳的jQuery视频插件
Nov 12 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
Mar 13 Javascript
JavaScript计算两个日期时间段内日期的方法
Mar 16 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
Sep 01 Javascript
深入理解JavaScript程序中内存泄漏
Mar 17 Javascript
javaScript数组迭代方法详解
Apr 14 Javascript
JavaScript实现复制文章自动添加版权
Aug 02 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
javascript中的面向对象
Mar 30 Javascript
vue 兄弟组件的信息传递的方法实例详解
Aug 30 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
May 19 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
PHP Error与Logging函数的深入理解
2013/06/03 PHP
php轻松实现文件上传功能
2016/03/03 PHP
PDO::errorInfo讲解
2019/01/28 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
2017/05/04 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
学习和使用python的13个理由
2019/07/30 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
python读写文件write和flush的实现方式
2020/02/21 Python
详解python 内存优化
2020/08/17 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
静态变量和实例变量的区别
2015/07/07 面试题
建筑实习自我鉴定
2013/10/18 职场文书
校庆活动方案
2014/03/31 职场文书
毕业生工作求职信
2014/06/30 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
员工福利申请报告
2015/05/15 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS