Vue.js实战之Vuex的入门教程


Posted in Javascript onApril 01, 2017

前言

在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式,详细点击这篇文章查看。

但是如果是大型项目,很多时候都需要在子组件之间传递数据,使用之前的方式就不太方便。Vue 的状态管理工具 Vuex 完美的解决了这个问题。

一、安装并引入 Vuex

项目结构:

Vue.js实战之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.js实战之Vuex的入门教程

四、在组件中修改状态

然后在 header.vue 中添加一个输入框,将输入框的值传给 store.js 中的 author

这里我使用了 Element-UI 作为样式框架

Vue.js实战之Vuex的入门教程

上面将输入框 input 的值绑定为 inputTxt,然后在后面的按钮 button 上绑定 click 事件,触发 setAuthor 方法

methods: {
 setAuthor: function () {
 this.$store.state.author = this.inpuTxt
 }
}

在 setAuthor 方法中,将输入框的值 inputTxt 赋给 Vuex 中的状态 author,从而实现子组件之间的数据传递

Vue.js实战之Vuex的入门教程

五、官方推荐的修改状态的方式

上面的示例是在 setAuthor 直接使用赋值的方式修改状态 author,但是 vue 官方推荐使用下面的方法:

Vue.js实战之Vuex的入门教程

首先在 store.js 中定义一个方法 newAuthor,其中第一个参数 state 就是 $store.state,第二个参数 msg 需要另外传入

然后修改 header.vue 中的 setAuthor 方法

Vue.js实战之Vuex的入门教程

这里使用 $store.commit 提交 newAuthor,并将 this.inputTxt 传给 msg,从而修改 author

这样显式地提交(commit) mutations,可以让我们更好的跟踪每一个状态的变化,所以在大型项目中,更推荐使用第二种方法。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
在次封装easyui-Dialog插件实现代码
Nov 14 Javascript
javascript取消文本选定的实现代码
Nov 14 Javascript
js调试系列 控制台命令行API使用方法
Jun 18 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
微信小程序 配置文件详细介绍
Dec 14 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
Apr 07 jQuery
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
Vue项目中设置背景图片方法
Feb 21 Javascript
Vue2.0实现组件数据的双向绑定问题
Mar 06 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
Sep 25 Javascript
AngularJS页面传参的5种方式
Apr 01 #Javascript
vue2.0构建单页应用最佳实战
Apr 01 #Javascript
vue货币过滤器的实现方法
Apr 01 #Javascript
javascript 中的try catch应用总结
Apr 01 #Javascript
JavaScript 事件流、事件处理程序及事件对象总结
Apr 01 #Javascript
ES6新特性之字符串的扩展实例分析
Apr 01 #Javascript
Vue.js实战之利用vue-router实现跳转页面
Apr 01 #Javascript
You might like
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
php array_search() 函数使用
2010/04/13 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
深入理解Python中的元类(metaclass)
2015/02/14 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
Django后台admin的使用详解
2019/07/08 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
倡议书格式范文
2014/04/14 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
会计系毕业求职信
2014/08/07 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
淮海战役观后感
2015/06/11 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android