vue--vuex详解

简介: vue vuex

Vuex

什么是Vuex?

官方说法:Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

个人理解:Vuex是用来管理组件之间通信的一个插件

  为什么要用Vuex?

      我们知道组件之间是独立的,组件之间想要实现通信,我目前知道的就只有props选项,但这也仅限于父组件和子组件之间的通信。如果兄弟组件之间想要实现通信呢?嗯..,方法应该有。抛开怎么实现的问题,试想一下,当做中大型项目时,面对一大堆组件之间的通信,还有一大堆的逻辑代码,会不会很抓狂??那为何不把组件之间共享的数据给“拎”出来,在一定的规则下管理这些数据呢? 这就是Vuex的基本思想了。

  Vuex有什么特性?

  怎么使用Vuex?

  引入Vuex.js文件

  创建实例:

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metahttp-equiv="X-UA-Compatible"content="ie=edge"><title>Document</title></head><scriptsrc="./js/vuex.js"></script><scriptsrc="./js/vue2.0.js"></script><body><divid="app"></div></body><script>Vue.use(Vuex);//在创建Vue实例之前varmyStore=newVuex.Store({
state:{
//存放组件之间共享的数据name:"jjk"        },
mutations:{
//显式的更改state里的数据         },
getters:{
//获取数据的方法         },
actions:{
//         }
    });
newVue({
el:"#app",
data:{
name:"dk"        },
store:myStore,
mounted:function(){
console.log(this)//控制台        }
    })
</script></html>

先解释上面代码的意思:

    new Vuex.Store({}) 表示创建一个Vuex实例,通常情况下,他需要注入到Vue实例里. Store是Vuex的一个核心方法,字面上理解为“仓库”的意思。Vuex Store是响应式的,当Vue组件从store中读取状态(state选项)时,若store中的状态发生更新时,他会及时的响应给其他的组件(类似双向数据绑定) 而且不能直接改变store的状态,改变状态的唯一方法就是,显式地提交更改(mutations选项)

那如何获取到state的数据呢?

  一般会在组件的计算属性(computed)获取state的数据(因为,计算属性会监控数据变化,一旦发生改变就会响应)

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metahttp-equiv="X-UA-Compatible"content="ie=edge"><title>Document</title></head><scriptsrc="./js/vuex.js"></script><scriptsrc="./js/vue2.0.js"></script><body><divid="app"><hello></hello></div></body><script>Vue.use(Vuex);
varmyStore=newVuex.Store({
state:{
//存放组件之间共享的数据name:"jjk"        },
mutations:{
//显式的更改state里的数据         },
getters:{
//过滤state数据         },
actions:{
//         }
    });
Vue.component('hello',{
template:"<p>{{name}}</p>",
computed: {
name:function(){
returnthis.$store.state.name            }
        },
mounted:function(){
console.log(this)
        }
    })
newVue({
el:"#app",
data:{
name:"dk"        },
store:myStore,
mounted:function(){
console.log(this)
        }
    })
</script></html>

state:用来存放组件之间共享的数据。他跟组件的data选项类似,只不过data选项是用来存放组件的私有数据。

getters:有时候,我们需要对state的数据进行筛选,过滤。这些操作都是在组件的计算属性进行的。如果多个组件需要用到筛选后的数据,那我们就必须到处重复写该计算属性函数;或者将其提取到一个公共的工具函数中,并将公共函数多处导入 - 两者都不太理想。如果把数据筛选完在传到计算属性里就不用那么麻烦了,getters就是干这个的,你可以把getters看成是store的计算属性。getters下的函数接收接收state作为第一个参数。那么,组件是如何获取经过getters过滤的数据呢? 过滤的数据会存放到$store.getters对象中。

mutations:前面讲到的都是如何获取state的数据,那如何把数据存储到state中呢?在 Vuex store 中,实际改变 状态(state) 的唯一方式是通过 提交(commit) 一个 mutation。  mutations下的函数接收state作为参数,接收一个叫做payload(载荷)的东东作为第二个参数,这个东东是用来记录开发者使用该函数的一些信息,比如说提交了什么,提交的东西是用来干什么的,包含多个字段,所以载荷一般是对象(其实这个东西跟git的commit很类似)还有一点需要注意:mutations方法必须是同步方法

actions:既然mutations只能处理同步函数,我大js全靠‘异步回调’吃饭,怎么能没有异步,于是actions出现了。

actions和mutations的区别

 1.Actions 提交的是 mutations,而不是直接变更状态。也就是说,actions会通过mutations,让mutations帮他提交数据的变更。

 2.Action 可以包含任意异步操作。ajax、setTimeout、setInterval不在话下

总结

  各个类型的 API各司其职,mutation 只管存,你给我(dispatch)我就存;action只管中间处理,处理完我就给你,你怎么存我不管;Getter 我只管取,我不改的。 action放在了 methods 里面,说明我们应该把它当成函数来用(讲道理,钩子函数也应该可以的) mutation是写在store里面的,这说明,它就是个半成品,中间量,我们不应该在外面去操作它。getter写在了 computed 里面,这说明虽然 getter我们写的是函数,但是我们应该把它当成计算属性来用。

目录
相关文章
|
4月前
vue3——如何安装vuex
vue3——如何安装vuex
35 0
|
4月前
|
JavaScript
Vue状态管理:在Vuex中,什么是模块(module)?
Vue状态管理:在Vuex中,什么是模块(module)?
31 1
|
4月前
|
JavaScript 开发者
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
50 4
|
3天前
|
JavaScript
Vue 中如何模块化使用 Vuex
Vue 中如何模块化使用 Vuex
6 0
|
5天前
|
存储 资源调度 JavaScript
vue引入vuex
vue引入vuex
27 7
|
13天前
|
JavaScript
Vue 中如何模块化使用 Vuex
Vue 中如何模块化使用 Vuex
|
16天前
|
JavaScript 测试技术 开发者
Vue 3 Vuex:构建更强大的状态管理系统
Vue 3 Vuex:构建更强大的状态管理系统
23 1
|
18天前
|
存储 JavaScript
Vue的状态管理:Vuex的使用和最佳实践
【4月更文挑战第24天】Vue状态管理库Vuex用于集中管理组件状态,包括State(全局状态)、Getters(计算属性)、Mutations(同步状态变更)和Actions(异步操作)。Vuex还支持Modules,用于拆分大型状态树。使用Vuex时,需安装并创建Store,定义状态、getter、mutation和action,然后在Vue实例中注入Store。遵循最佳实践,如保持状态树简洁、使用常量定义Mutation类型、避免直接修改状态、在Actions中处理异步操作、合理划分Modules,以及利用Vuex提供的插件和工具,能提升Vue应用的稳定性和可维护性。
|
1月前
|
存储 JavaScript
vue3 vuex
vue3 vuex
20 0
vue3 vuex
|
2月前
|
JavaScript
vue之vuex
vue之vuex
22 0