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 相关文章推荐
去除链接虚线全面分析总结
Aug 15 Javascript
Prototype 学习 工具函数学习($A方法)
Jul 12 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
Jan 22 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
Sep 29 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
Oct 17 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
Jan 05 Javascript
jquery 判断selection range 是否在容器中的简单实例
Aug 02 Javascript
Angular和百度地图的结合实例代码
Oct 19 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
Jan 13 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
Jun 28 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
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
Javascript - HTML的request类
2007/01/09 Javascript
如何用js控制css中的float的代码
2007/08/16 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
详解numpy的argmax的具体使用
2019/05/27 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
Html5在手机端调用相机的方法实现
2020/05/13 HTML / CSS
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
公司董事长岗位职责
2014/06/08 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
班主任2015新年寄语
2014/12/08 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
零基础学java之循环语句的使用
2022/04/10 Java/Android