
Vuex(二)--Vue核心概念State(vuex的使用)
发布日期:2021-05-07 19:31:48
浏览次数:25
分类:精选文章
本文共 2382 字,大约阅读时间需要 7 分钟。
现在在上一篇的理解基础上使用Vuex中的State,一个正面例子来证实,同时也介绍一下Vue核心概念State。
Vuex 使用单一状态树——是的,用一个对象就包含了全部的应用层级状态。至此它便作为一个“唯一数据源 (SSOT)”而存在。这也意味着,每个应用将仅仅包含一个 store 实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。单状态树和模块化并不冲突——在后面的章节里我们会讨论如何将状态和状态变更事件分布到各个子模块中。
/** * 1) vuex管理的状态对象 * 2) 它应该是唯一的 * 3) 谁来读取:组件中:this.$store.state.xxx * 4) 类似于data */
Vuex的使用
引入Vuex
方式一(推荐使用):
首先我们在 vue.js 2.0+ 开发环境中安装 vuex :
npm install vuex --save
方式二:
1.在package.json中的dependencies字段加入:"vuex": "^3.0.0"后:
"dependencies": { "vue": "^2.5.2", "vue-router": "^3.0.1", "vuex": "^3.0.0" },
2.终端cd到项目目录然后执行:npm install安装即可。然后在运行项目
使用Vuex
1.在 src/main.js全局
中加入 :
import Vue from 'vue'import App from './App'import router from './router'// 全局加入vueximport Vuex from 'vuex'//通过Vue.use()来使用这个VuexVue.use(Vuex)// 引入我们分离出来的vuex文件import {store} from './store/store'Vue.config.productionTip = false/* eslint-disable no-new */new Vue({ el: '#app', // 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件;这里可以简写成一个store store:store,//所有的组件对象都多了一个属性:$store router, components: { App }, template: ''})
2.在src
目录下新建store
文件夹;在该文件夹下新建store.js
文件。store.js
中代码如下:
// 在分离出来的vuex文件中安装 Vuex import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export const store = new Vuex.Store({ state: { // 把页面显示数据写在store.js文件 goodsList: [ { name: '赣州橙子', price: '8.8' }, { name: '新疆哈密瓜', price: '2.0' }, { name: '山东大枣', price: '3.2' }, { name: '阳澄湖大闸蟹', price: '10.0' } ] } })
3.获取数据。
由于 Vuex 的状态存储是响应式的,从 store 实例中读取状态最简单的方法就是在计算属性中返回某个状态或直接使用$store.state.属性名获取vuex中的数据。通过在根实例中注册 store 选项,该 $store 实例会注入到根组件下的所有子组件中,且子组件能通过 this.$store 访问到。page3.vue和page4.vue代码:page3.vue
我是第一个页面
查看第二个页面 { {$store.state.goodsList}}
商品:{ {item.name}}
价格:¥{ {item.price}}
组件仍然保有局部状态
使用 Vuex 并不意味着你需要将所有的状态放入 Vuex。虽然将所有的状态放到 Vuex 会使状态变化更显式和易调试,但也会使代码变得冗长和不直观。如果有些状态严格属于单个组件,最好还是作为组件的局部状态。你应该根据你的应用开发需要进行权衡和确定。效果
mapState
辅助函数
当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState
辅助函数帮助我们生成计算属性,让你少按几次键:
// 在单独构建的版本中辅助函数为 Vuex.mapStateimport { mapState } from 'vuex'
computed: { ...mapState([ // 映射 this.count 为 store.state.count 'count' ])}// 直接在模板中使用{ {count}}
参考文献:
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月28日 00时11分23秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
GDB命令—jump/return/call/disassemble
2021-05-08
java基础--继承
2021-05-08
java基础--java内部类
2021-05-08
fastjson 反序列化源码解析
2021-05-08
按位与、或、非、异或总结
2021-05-08
TCP心跳检测包
2021-05-08
01 背包问题
2021-05-08
JVM - 参数配置影响线程数
2021-05-08
idea如何导入一个maven项目
2021-05-08
在 springboot 项目中全局处理异常
2021-05-08
Keil修改Stm32的工程名字
2021-05-08
ILI9341几个重要的命令
2021-05-08
AD如何对原理图进行注释
2021-05-08
力扣:地图分析(多源bfs)
2021-05-08
NC15136: 迷宫
2021-05-08
动态点击a标签
2021-05-08
@RequestBody和@RequestParam
2021-05-08
oracle创建序列语法
2021-05-08
springboot通过控制层跳转页面404
2021-05-08
idea2020 没有 tomcat server
2021-05-08