您的位置:首页 > Web前端 > Vue.js

Vue插件——状态管理与Vuex基本用法

2018-06-27 16:34 645 查看

1.状态管理与使用场景

Vuex作为Vue的一个插件使用,可以更好地管理和维护整个项目的组件状态。
在实际业务中,经常有跨组件共享数据的需求,Vuex的设计就是用来统一管理组件状态的,它定义了一系列规范来使用和操作数据,使组件应用更加高效。
使用Vuex会有一定的门槛和复杂性,它的主要使用场景是大型单页应用,更适合多人协同开发。如果项目不是很复杂,也许bus方法就能很简单地解决需求。
当然,并不是所有大型多人协同开发的SPA项目都必须使用Vuex,在一些生产环境中只是使用bus也能实现得很好,用与否主要取决于团队和技术储备。
每一个框架的诞生都是用来解决具体问题的。虽然bus已经可以很好地解决跨组件通信,但它在数据管理、维护、架构设计上还知识一个简单的组件,而Vuex却能更优雅和高效地完成状态管理。

2.Vuex基本用法

2.1安装并使用Vuex

首先通过NPM安装Vuex

npm install –save vuex

在main.js里,通过Vue.use()使用Vuex:

import Vue from 'vue';
import Vuex from 'vuex';
import App from './app.vue';

Vue.use(Vuex);

const store = new Vuex.Store({
//vuex的配置
});

new Vue({
el: '#app',
store: store,
render: h => {
return h(App)
}
});


2.2 设置与读取数据

仓库store包含了应用的数据(状态)和操作过程。Vuex里的数据都是响应式的,任何组件使用同一store的数据时,只要store的数据变化,对应的组件也会立即更新。

数据保存在Vuex选项的state字段内,比如要实现一个计数器,定义一个数据count,初始值为0:

const store = new Vuex.Store({
state:{
count:0
}
});
在任何组件内,可以直接通过$store.state.count读取
//index.vue
<template>
<div>
<h1>首页</h1>
{{count}}
</div>
</template>
<script>
export default{
computed:{
count(){
return this.$store.state.count
}
}
}
</script>

现在访问首页,计数0已经可以显示出来了。

2.3 更新数据

在组件内,来自store的数据只能读取,不能手动改变,改变store中数据的唯一途径就是显式地提交mutations。
mutations是Vuex的第二个选项,用来直接修改state里的数据。给计数器增加2哥mutations,用来加1和减1:

//main.js
const store = new Vuex.Store({
state:{
count:0
},
mutations:{
increment(state){
state.count++;
},
decrease(state){
state.count--;
}
}
});
在组件内,通过this.$store.commit方法来执行mutations。在index.vue中添加两个按钮用于加和减:
<template>
<div>
<h1>首页</h1>
{{count}}
<button @click="handleIncrement">+1</button>
<button @click="handleDecrease">-1</button>
</div>
</template>
<script>
export default{
computed:{
count(){
return this.$store.state.count;
}
},
methods:{
handleIncrement(){
this.$store.commit('increment');
},
handleDecrease(){
this.$store.commit('decrease');
}
}
}
</script>

这看起来很像JavaScript的观察者模式,组件只负责提交一个事件名,Vuex对应的mutations来完成业务逻辑。

Mutations还可以接收第二个参数,可以是数字、字符串或对象等类型。比如每次增加的不是1,而是指定的数量,可以这样改写:

//main.js,部分代码省略
mutations:{
increment (state, n=1) {
state.count+=n;
}
}



上文:Weex内置模块——storage模块

更多内容,欢迎关注微信公众号“让知识成为资产”

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: