网站首页 > 技术文章 正文
1. 前言
本小节我们将学习和使用 Vuex 中 state 的概念。包括如何创建 state、组件中获取 state、以及辅助函数 mapState 的使用方法。
2. 创建数据仓库
在上一小节中,我们已经给大家写了一个简单的示例,大家一定还记得 Vuex.Store({...}) 这个方法。在 Vuex 中,我们通过该方法创建一个数据仓库,并把数据 state 传入。例如:
const store = new Vuex.Store({
state: {
count: 12000,
name: '木子教程',
logo: ''
}
})
那么,创建完数据仓库后,我们怎样才能在 Vue 组件中使用它呢?我们知道,要使用 Vue 需要通过 new Vue () 创建一个 Vue 实例,并传入对象的参数。要在 Vue 中使用 store,只需要在创建 Vue 实例的时候将 store 传入即可:
var vm = new Vue({
el: '#app',
store: store
})
3. 在 Vue 组件中获得 Vuex 状态
那么我们如何在 Vue 组件中展示状态呢?由于 Vuex 的状态存储是响应式的,从 store 实例中读取状态最简单的方法就是在计算属性中返回某个状态:
实例演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<div> {{ count }} </div>
</div>
</body>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vuex@3.1.2/dist/vuex.js"></script>
<script type="text/javascript">
const store = new Vuex.Store({
state: {
count: 12
}
})
var vm = new Vue({
el: '#app',
store,
computed: {
count() {
return this.$store.state.count
}
}
})
</script>
</html>
"运行案例" 可查看在线运行效果
代码解释 JS 代码第 4-8 行,我们定义了仓库 store。 JS 代码第 11 行,创建 Vue 实例的时候传入 store。 JS 代码第 13-15 行,利用计算属性返回 count。 HTML 中利用插值显示 count 的数据。
4. mapState 辅助函数
当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性:
实例演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<div> 我是: {{ name }},我的今年:{{ age }}</div>
<div>{{countPlusAge}}</div>
</div>
</body>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vuex@3.1.2/dist/vuex.js"></script>
<script type="text/javascript">
const store = new Vuex.Store({
state: {
name: '句号',
age: 18
}
})
var vm = new Vue({
el: '#app',
store,
data() {
return {
count: 1
}
},
computed: Vuex.mapState({
// 箭头函数可使代码更简练
name: state => state.name,
// 传字符串参数 'age' 等同于 `state => state.age`
age: 'age',
// 为了能够使用 `this` 获取局部状态,必须使用常规函数
countPlusAge (state) {
return state.age + this.count
}
})
})
</script>
</html>
运行案例点击 "运行案例" 可查看在线运行效果
代码解释 JS 代码第 4-9 行,我们定义了仓库 store。 JS 代码第 12 行,创建 Vue 实例的时候传入 store。 JS 代码第 18-28 行,利用计算属性分别返回 name、age、countPlusAge。
当映射的计算属性的名称与 state 的子节点名称相同时,我们也可以给 mapState 传一个字符串数组。
computed: Vuex.mapState([
// 映射 this.age 为 store.state.age
'age',
// 映射 this.name 为 store.state.name
'name'
])
// ===等同于===
computed: Vuex.mapState({age:'age', name: 'name'})
//
5. 对象展开运算符
mapState 函数返回的是一个对象。我们如何将它与局部计算属性混合使用呢?通常,我们需要使用一个工具函数将多个对象合并为一个,以使我们可以将最终对象传给 computed 属性。但是自从有了对象展开运算符,我们可以极大地简化写法:
computed: {
localComputed () { /* ... */ },
// 使用对象展开运算符将此对象混入到外部对象中
...Vuex.mapState({
// ...
})
}
6. 小结
本节,我们带大家学习了 Vuex 中 state 的使用方式。主要知识点有以下几点:
- 在 store 中定义 state 数据。
- 通过 $store.state 访问 state 中的数据。
- 使用 mapState 辅助函数简化获取 state 中数据的写法。
- 上一篇: vuex的是干什么的以及简单的用法示例
- 下一篇: Vuex 映射完全指南
猜你喜欢
- 2024-09-22 35《Vue 入门教程》Vue-Cli 项目文件结构分析
- 2024-09-22 vuex基础进阶用法(module模块化)
- 2024-09-22 Vue入门025- 求和案例_vuex版(getters的使用)
- 2024-09-22 Vue实战——vue-cli3创建项目是怎么集成vuex状态管理的?
- 2024-09-22 挑战全网最幽默的Vuex系列教程:第六讲 Vuex的管理员Module实战
- 2024-09-22 万字总结Vue(包含全家桶),希望这一篇可以帮到您(二)
- 2024-09-22 Vue开发库存管理前端页面时一些小经验记录
- 2024-09-22 基于 Vue 技术栈的微前端方案实践
- 2024-09-22 Vue(Axios+VueRouter+Vuex)的入门使用
- 2024-09-22 「Vuex入门」核心概念1.State
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)