网站首页 > 精选文章 正文
前言
在 Vue初学习之状态管理 的前提下,我们再来学习下状态管理模式下的几个特性
State
Vuex 使用单一状态树来管理应用的状态数据,在Vue 组件中怎么展示状态呢?最简单的方法是在计算属性中返回某个状态值:
创建一个 store
const store = new Vuex.Store({
state: {
name: "lilei"
},
mutations: {
changeName: (state, name) => {
state.name = name
}
}
});
export default {
name: "HelloWorld",
props: {
msg: String,
},
computed: {
textname() {
return store.state.name;
},
},
};
当 store.state.name 改变时,都会重新触发计算属性的计算,并更新关联的DOM
这种方式会使使用state 的组件频繁的导入,并且在测试时,需要进行模拟状态。
Vuex 通过 store选项,将 store 注入到每个子组件中:
new Vue({ data: data, render: h => h(App), store }).$mount("#app");
在子组件中可以通过以下方式进行使用
export default {
name: "HelloWorld",
props: {
msg: String,
},
computed: {
textname() {
// this.$store进行引用
return this.$store.state.name;
},
},
};
mapState
上面创建的store的属性比较少,如果要获取多个状态时,要声明较多的计算属性,这个操作就有点重复和冗余了,作为程序员,都是能有多懒就多懒的。为了解决这个问题,可以使用 mapState 辅助函数来生成计算属性
import { mapState } from "vuex";
export default {
name: "HelloWorld",
props: {
msg: String,
},
computed: mapState({
// 箭头函数
textname: (state) => state.name,
// 传字符串参数 'textname' 等同于 `state => state.name`
textnameAlias: "textname",
// 通过常规函数可以访问 this
getName(state) {
return state.name + this.name;
},
}),
};
如果映射的名称和state的子节点名称相同时,也可以使用如下的方式
import { mapState } from "vuex";
export default {
name: "HelloWorld",
props: {
msg: String,
},
// 在模板里可以使用 {{name}}
computed: mapState(["name"]),
};
对象展开运算符
mapState 函数返回的是一个对象。我们可以通过对象展开运行符,将多个状态与本地计算属性进行混合使用
import { mapState } from "vuex";
export default {
name: "HelloWorld",
props: {
msg: String,
},
computed: {
// 局部计算属性,再访问 状态的节点
localName() {
return "text" + this.name;
},
...mapState(["name"]),
},
};
总结
使用 Vuex 也要看情况而定,如果有些状态是严格属于单个组件,最好还是作为组件的局部状态。
猜你喜欢
- 2025-07-19 为什么react需要fiber架构,而vue却不需要?
- 2025-07-19 Vue 中的 Props 与 Data 细微差别,你知道吗?
- 2025-07-19 如何使用 Chrome DevTools(及 Vue Devtools)调试 Vue.js 应用
- 2025-07-19 VUE3 你不知道的按钮与菜单权限(vue按钮权限管理)
- 2025-07-19 vue3-响应式基础之reactive(vue3.0响应式原理)
- 2025-07-19 什么是状态管理工具?(vuex)(状态管理具有哪两种方式)
- 2025-07-19 Vue3 开发总踩坑?这 10 个技巧让你少走半年弯路!
- 2025-07-19 Vue3 实战指南:15 个高效组件开发技巧解析
- 2025-07-19 Vue3 终于可以共享自己的屏幕给别人看了!
- 2025-07-19 vue3中到底使用Ref还是Reactive,我和同事吵起来了
- 最近发表
-
- Vue 前端开发——导入Excel/Csv(vue前端导入excel文件)
- element-ui实现动态表头的表格问题汇总
- 告别频繁登录!Nuxt3 + TS + Vue3实战:双Token无感刷新方案全解析
- 斯皮尔伯格:流媒体电影没资格拿奥斯卡?
- Vue3 “微商城”前台开发文档(vue前端开发工具)
- Ant Design of Vue 组件 a-table 如何横向排列
- 超简 Vue3+Ts 可视化拖拽设计器DreamDesign
- 基于 Vue.js 磁片栅格布局组件VueGridLayout
- vue中的select下拉框多选以及多选数据回显
- Vue脚手架使用Element UI(vue脚手架使用视频教程与步骤)
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)