[Vue教程]快速认识vuex
为什么要用Vuex?
首先我来引入一个概念,单向数据流的概念。

我们页面是有很多个视图View组成的,用户的操作Actions会带来视图上状态State变化,状态的变化又会驱动视图的更新,如果我们的页面没有采用这样的数据流方式开发的话,那么组件间的状态管理就会异常复杂。
我们常见的用vuex解决问题,多个视图依赖同一状态的这样问题,比如菜单导航。来自不同视图的行为需要改变同一状态的问题,比如评论的弹幕,当我们发出一条评论的时候,我们要去改变弹幕的状态,去给它新增一条弹幕或者说删除一条旧的弹幕。
什么是vuex?
vuex就是为vue.js开发的状态管理模式,组件状态集中管理,组件状态改变遵循统一的原则
我来看一个例子:
<template> <div> hello info component </div> </template> <script> export default { name: "Info.vue" } </script> <style scoped> </style>
这个例子是我们用vue-cli工具中的ui工具所形成的工程hello-ui,当初我们选择了Vuex这个组件,所以它帮我们生成了store.js

import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { }, mutations: { }, actions: { } })
打开这个文件我们看到它引入了vuex,在Vue这个对象上绑定了vuex,在Vuex.Store这个方法里它传递了一个对象,有state、mutations、actions这样三个属性,我们重点来认识一下state和mutations。
state顾名思义就是组件的状态,在这里做一个集中的管理。mutations是唯一一个可以去改变vuex状态的一个方法集,所有的方法都放在这个里面。
这里我新添加了一个Info.vue组件,在组件中我添加一个按钮,每次点击触发一个click事件去执行add方法。
<template> <div> hello info component <button type="button" @click="add()">添加</button> </div> </template>
然后我们在script中写我们的add方法,在控制台打印。
<script> export default { name: "Info", methods: { add() { console.log('add Event from info!') } } } </script>
打开调试工具,我们点击Info,在控制台当我们点击添加按钮的时候看一下会有什么变化或者输出,可以看到正好是我们要打印输出的信息,说明这个事件已经成功了。

如何在页面上使用vuex呢?很简单,我们在script首行用import store from ‘@store’引入即可,这里@store.js可以省略js,这个@符号大家可以看一下vue-cli工具的config配置文件,@就是代表src这个目录,然后在引入store
<script> import store from '@/store' export default { name: "Info", store, methods: { add() { console.log('add Event from info!') } } } </script>
然后在store.js中给它传入state状态定义一个count计数,在mutations中定义一个increase方法,执行这个方法每次去改变状态让count值去加1
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { count: 0 }, mutations: { inscrease() { this.state.count ++ } }, actions: { } })
然后在Info.vue中怎么改变它的状态呢?使用state.commit(”)这个关键词,引号里面就是store.js里面mutations中刚定义好的inscrease方法名字。这样我们每次点击添加按钮的时候,执行的add方法里面就会提交inscrease这样的一个mutations或者说是提交这样一个事件出去。
<template> <div> hello info component <button type="button" @click="add()">添加</button> </div> </template> <script> import store from '@/store' export default { name: "Info", store, methods: { add() { console.log('add Event from info!') store.commit('inscrease') } } } </script> <style scoped> </style>
我们到页面上看一下,打开控制台调试工具,选择Vuex,如下图操作:

然后当我们点击添加按钮时,就会在控制台中输出我们定义好的inscrease这个mutations,然后每次点击添加这个state状态的count值就会发生一个变化。

如何将state状态的count值传入到About组件呢?很简单,在About.vue组件里面引入Vuex,然后直接在页面上引入它就可以了,我在script中定义一个data,在页面上定义一个msg变量,用store.state.count就可以引用到store状态了
<template> <div class="about"> <h1>This is an about page</h1> <p>{{msg}}</p> </div> </template> <script> import store from '@/store' export default { name: 'about', store, data () { return { msg: store.state.count } } } </script>
当我们点击添加按钮时,count值发生变化,我们切换到about组件上可以看到msg打印出来了

从上面的例子看出,我们要使用vuex首先要定义一个store.js文件,然后去引用vuex组件“Vue.use(Vuex)”,定义state、mutations,state里面是我们要管理的公用状态,mutations是定义改变state状态的方法。在组件中如何使用vuex呢?我们首先要引用store这个文件,然后在组件的default里面去引用store,最后在组件中使用到一个commit关键词用store.commit去提交修改。
2. 本站不保证所提供下载的免费资源的准确性、安全性和完整性,免费资源仅供下载学习之用!如有链接无法下载、失效,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或技术教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
5. 加入前端开发QQ群:565733884,我们大家一起来交流技术!
码云笔记 » [Vue教程]快速认识vuex