详解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的递增/递减运算符和带操作的赋值运算符的等价式
Dec 08 Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 Javascript
javascript两种function的定义介绍及区别说明
May 02 Javascript
深入探究AngularJS框架中Scope对象的超级教程
Jan 04 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
Jun 04 Javascript
基于JavaScript实现选项卡效果
Jul 21 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
Oct 15 jQuery
解决Vue打包之后文件路径出错的问题
Mar 06 Javascript
详解Vue内部怎样处理props选项的多种写法
Nov 06 Javascript
js防抖和节流的深入讲解
Dec 06 Javascript
Vue.js中Line第三方登录api的实现代码
Jun 29 Javascript
vue实现在进行增删改操作后刷新页面
Aug 05 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设计模式之单例模式代码
2016/06/11 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
几种延迟加载JS代码的方法加快网页的访问速度
2013/10/12 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
vue实现选中效果
2020/10/07 Javascript
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
python SVD压缩图像的实现代码
2019/11/05 Python
python通过链接抓取网站详解
2019/11/20 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
python将dict中的unicode打印成中文实例
2020/05/11 Python
Python map及filter函数使用方法解析
2020/08/06 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
学生社团文化节开幕式主持词
2014/03/28 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
MySQL索引失效的典型案例
2021/06/05 MySQL
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android