详解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 相关文章推荐
jQuery中 noConflict() 方法使用
Apr 25 Javascript
深入解读JavaScript中的Hoisting机制
Aug 12 Javascript
javascript实现图片轮播效果
Jan 20 Javascript
全面解析Javascript无限添加QQ好友原理
Jun 15 Javascript
BootStrap 实现各种样式的进度条效果
Dec 07 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
Javascript实现的StopWatch功能示例
Jun 13 Javascript
原生js实现form表单序列化的方法
Aug 02 Javascript
mpvue跳转页面及注意事项
Aug 03 Javascript
Next.js实现react服务器端渲染的方法示例
Jan 06 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
Nov 25 Javascript
Vue 技巧之控制父类的 slot
Feb 24 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 HTML代码串截取代码
2008/12/29 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
10个实用的脚本代码工具
2010/05/04 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
Python实现基于HTTP文件传输实例
2014/11/08 Python
python实现堆栈与队列的方法
2015/01/15 Python
Python中内建函数的简单用法说明
2016/05/05 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
python 2.7.14安装图文教程
2018/04/08 Python
把pandas转换int型为str型的方法
2019/01/29 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
CNC数控操作工岗位职责
2013/11/19 职场文书
初中女生自我鉴定
2013/12/19 职场文书
诚信考试承诺书
2014/03/27 职场文书
英文推荐信格式范文
2014/05/09 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
PHP实现rar解压读取扩展包小结
2021/06/03 PHP