vuex详解和用法(Venx使用指南(精简版))

本文目录
Venx使用指南(精简版)
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。
如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式 就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。引用 Redux 的
我们的核心思想是要理解Vuex是是什么东西,用来做什么.
现在我们要把它(Vuex)看做是一个特殊的对象,是用来存放和提取的,所以要理解Vuex的关键是懂得存和取的思想.
下面进行配置:
(1).首先引进vue 和 vuex 并使用.
(2).声明一个变量存放vuex的基本配置
在这个对象里面要有两个特别关键的配置.
一个是存(state),一个是取state(mutations).
(3).最后再将其导出export default new Vuex.Store(options)
(现在可以用了!)
实例:需求APP底部有的页面需要底部有的页面不显示底部,在此我们使用Vuex 完成.
首先在state(储存)里设置 showFooter:false,默认不显示;
2.为提取(getters)在getters里面设置一个函数并且将上面的state传入 ,返回里面的值showFooter,
3.设置 mutation用来修改state里面的属性值
4.接下来我们要引进路由守卫的概念,简单介绍一下:
路由守卫是指当用户满足了某些要求之后才可以离开或者进入某个页面或者场景的时候使用。 比如说只有当用户填写了用户名和密码之后才可以进入首页,比如说用户离开某个页面时明月保存信息提示用户是否保存信息后再离开等操作,控制这些要求的就叫路由守卫。
此时我们来到router.index页面配置路由守卫结合Vuex完成我们的需求.
然后在路由配置中添加showFooter: true(因为要显示的多,不显示的少,所以,这里写显示,不想显示底部的页面只需要不写这句即可).
5.接下来到App.vue页面里修改底部footer标签
添加v-if="$store.state.showFooter"
vuex的基本使用
作用 :
它采用集中式存储管理应用的所有组件的状态。(统一管理所有组件中公用的数据)
组成:
state:管理所有的状态(数据)
getter:state 的计算属性
mutations:用来操作 state
用法 :
1.0 定义
// 在 store/index.js 中
export default new Vuex.Store ({state:{userInfo:’’}})
2.0 使用
// 在 .vue(组件) 中
// // 取值
this.$store.state.userInfo
// // 赋值
this.$store.state.userInfo={}
总结:
在 vuex 中,如果要给 vuex 中的数据赋值,不能直接得到 state 去赋值,这样不配合 vuex 设计规范
vuex - mapState 基本使用
它是 vuex 中 state 对应的一个辅助函数
mapState:可以用来简化 vuex 中 state 中属性的使用
步骤:
导入
import { mapState } from ’vuex’
定义
computed:{...mapState()}
使用
this.state中的属性名 === this.$store.state.state中的属性名
vuex - mutations 的使用
在 vuex 中,如果要给 state 中的属性赋值,建议大家借助 mutation 来赋值
步骤:
1.0 在 mutations 中定义赋值方法
// 在 store/index.js 中
export default new Vuex.Store({
state: { userInfo: ’ ’ },
mutations: { setUserInfo ( state, payload ) {
state.userInfo = payload
}
}})
2.0 在组件中调用方法
// 在 .vue(组件) 中
// 取值
this.$store.state.userInfo
// 赋值
this.$store.commit(’setUserInfo’, data)
vuex - mapMutaions 基本使用
mapMutaions : 可能用来简化 vuex 中的 mutations 中方法的调用
步骤:
导入 mapMutations
import { mapMutaions } from ’vuex’
定义方法:
methods:{...mapMutations()}
使用方法:
this.setUserInfo(’abc’)
总结:
vuex:
state:管理状态
取值:
this.$store.state.xxx
...mapState() 或者 ...mapState({ myname: ’xxx’ })
mutaions
取值:
this.$store.commit(’xxx’, payload)
...mapMutations() 或者 ...mapMutations({ myname: ’xxx’ })
Vuex简单使用
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
如果一份数据需要在多个组件中使用,组件间传值又比较复杂,就可以使用vuex托管数据。
state选项: 定义状态(状态就是数据)。
mutations选项: 定义修改状态的方法(注意:这里面只能定义同步方法)。
$store: 返回的是当前项目中的全局状态对象。
commit()方法: 用于执行指定的mutations里面的方法。
在组件中,直接通过$store.state就可以获取到全局状态对象管理的状态数据,直接渲染到页面。
state选项: 定义状态(状态就是数据)。
通过 $store.state.数据名 使用。
getters选项: 定义计算属性。方法的参数是状态对象。
通过 $store.getters.属性名 使用计算属性。
mutations选项: 定义修改状态的方法(注意:这里的方法一般都是同步方法)。方法的第一个参数是状态对象,第二个参数是新值。
通过 commit() 方法,调用mutations里面的方法。
actions选项: 定义操作状态的方法(这里的方法可以定义异步方法)。
注意: actions里的方法最好不要直接操作state状态,而是通过调用mutations里面的方法去修改状态。所以,actions直接操作的是mutations。
通过 dispatch() 方法,调用actions里面定义的方法。
由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。
为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块。
namespaced属性: 默认情况下,action、mutation 和 getter 是注册在全局命名空间的。通过设置namespaced属性为true,将action、mutation 和 getter全部注册到私有命名空间中。
要从私有模块中获取数据,方式是: $store.state.模块名称.模块的数据 。
要从私有模块中获取计算属性,方式是: $store.getters 。
调用私有模块里面的mutations定义的方法,方式是: $store.commit(’模块名/方法名’,新值) 。
调用私有模块里面的actions定义的方法,方式是: $store.dispatch(’模块名/方法名’,新值) 。
直接在模板中使用全局状态管理数据,表达式会写的很长。所以可以使用计算属性。
通过映射函数mapState、mapGetters、mapActions、mapMutations,可以将vuex.store中的属性映射到vue实例身上,这样在vue实例中就能访问vuex.store中的属性了,便于操作vuex.store。
如果vuex里面state的数据名称 跟 页面中的计算属性名称相同,就可以使用 mapState 映射函数,自动生成页面中的计算属性。
如果vuex里面getters的数据名称 跟 页面中的计算属性名称相同,就可以使用 mapGetters 映射函数,自动生成页面中的计算属性。
注意: 如果要映射模块里面的state/getters,函数的第一个参数设置为模块的名称。
如果定义的方法名跟全局管理对象中mutations里面的方法名相同,并且定义的方法会带有一个参数,通过参数传递数据。满足该规则,就可以使用 mapMutations 映射函数生成方法。
如果定义的方法名跟全局管理对象中actions里面的方法名相同,并且定义的方法会带有一个参数,通过参数传递数据。满足该规则,就可以使用 mapActions 映射函数生成方法。
注意: 如果要映射私有模块中mutations/actions里面的方法,函数的第一个参数设置为模块的名称。

更多文章:
js写入本地json文件(vue项目导入本地json文件的方法)
2026年4月12日 14:00
success的几种用法(success用法固定搭配是什么)
2026年3月22日 03:45
qq代码公安局已加入该群(QQ突然发消息“公安局已加入该会话”怎么办)
2026年5月27日 01:00
网站下载的软件(手机从网站上下载的软件一般下到哪个文件夹里)
2025年7月28日 05:15
mysql数据库怎么初始化(初始化腾讯云mysql数据库时支持什么格式)
2025年8月3日 05:30
hashset类添加元素的方法(java 怎么给set赋值)
2026年5月1日 10:00
英国首相宣布(英国首相约翰逊辟谣将入职中国钻石公司,事情的真相到底是什么)
2025年7月16日 21:00
sutool插件(怎么用Sketchup较快的制作玻璃的分隔杆,就是一大片玻璃幕墙上的分隔杆)
2025年12月23日 01:30
绘图仪属于什么设备(绘图仪是计算机的输入设备吗,还有鼠标器是计算机的输入设备吗)
2025年9月17日 00:45














