vuex官方解释

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

简单理解

vuex就是把组件共享状态抽取出来以一个全局单例模式管理,把共享的数据函数放进vuex中,任何组件都可以进行使用。

什么时候我们该使用它?

Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。

如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。

使用

1、 安装Vex

npm install --save vuex

2、配置Vuex文件

新建文件夹 store 新建文件 index.js ,在index.js文件进行配置vuex文件——相当于数据库,只不过是在前端。所有状态(数据都放在state中)比如:counter就相当于数据库的一个字段,0就是字段值。

import { createStore } from "vuex";
// const store = createStore({
// })
// export default store;
//或者简写如下
export default createStore({state:{counter:0}
})

3、在全局进行引入,在main.js文件添加以下代码,重点是引入和挂载。

import store from './store'
const app = createApp(App);
app.use(store)
app.mount('#app')

4、在组件中读取状态,在任意一个组件页面中使用,都可以获取到存储在state下的值

第一种

 <p> counter = {{$store.state.counter}} </p>

第二种 在任意一个组件页面中使用以下代码,只不过是放在了computed下,computed专门读取vuex的数据。

<template><p>{{ counter }}</p>
</template><script>
import { mapState } from "vuex"
export default {computed:{//专门读取vuex的数据//如有多个 则: ...mapState(["counter",“age"])...mapState(["counter"])}
}
</script><style></style>

核心概念

vuex中一共有五个状态 State  Getter  Mutation   Action   Module

▣State

提供唯一的公共数据源,所有共享的数据统一放到store的state进行储存,相似与data

在vuex中state中定义数据,可以在任何组件中进行调用

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({//数据,相当于datastate: {name:"张三",age:12,count:0},
})

调用:

方法一:

在标签中直接使用

  <p>{{$store.state.count}}</p><p>{{$store.state.name}}</p><p>{{$store.state.age}}</p>

方法二:

this.$store.state.全局数据名称

方法三:从vuex中按需导入mapstate函数

注意:当前组件需要的全局数据,映射为当前组件computed属性

<template><p>{{ counter }}</p>
</template><script>
import { mapState } from "vuex"
export default {computed:{//专门读取vuex的数据//如有多个 则: ...mapState(["counter",“age"])...mapState(["counter"])}
}
</script><style></style>

▣ Mutation

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数:

import { createStore } from "vuex";
// const store = createStore({// })
// export default store;
//或者简写如下
export default createStore({state:{//所有状态(数据都放在state中)counter:0},getters:{getCount(state){return state.counter >0 ?state.counter : "此时的counter<=0"}},mutations:{addCount(state){state.counter=state.counter+1;}}
})

调用方法:

<template><h1>主页</h1><p>counter : {{$store.state.counter}}</p><p>counter : {{$store.getters.getCount}}</p><p>{{getCount}}</p><button @click="add">counter++操作</button>
</template><script>
import { mapGetters } from "vuex"
export default {computed:{...mapGetters(["getCount"])},methods:{add(){//固定调用方式this.$store.commit("addCount")}}
}
</script>
<style>
</style>

分析:任何对counter引入的组件都会得到相同的变化,即counter值相同。但新开一个页面,counter不会得到相同的变化,依旧从index文件中获取到初始值:0 。

使用二 :带参数传递

例子:点击一次,增加15

例子升级:调用方法使用mapMutations获取,即修改methods方法中如下:效果一样。

<template><p>counter : {{$store.state.counter}}</p><p>counter : {{$store.getters.getCount}}</p><p>{{getCount}}</p><button @click="add">counter+15操作</button>
</template><script>
import { mapGetters, mapMutations} from "vuex"
export default {computed:{...mapGetters(["getCount"])},methods:{...mapMutations(["addCount"]),add(){this.addCount(15)}}
}
</script><style></style>

Action

Action和Mutation相似,Mutation 不能进行异步操作,若要进行异步操作,就得使用Action

Action 提交的是mutation,而不是直接变更状态。

import axios from "axios";
import { createStore } from "vuex";
export default createStore({state:{//所有状态(数据都放在state中)counter:0},getters:{getCount(state){return state.counter >0 ?state.counter : "此时的counter<=0"}},mutations:{addCount(state,num){state.counter += num;}},actions:{//({}) 加上花括号代表对象结构赋值asyncAdd({commit}){axios.get("http://iwenwiki.com/api/FingerUnion/list.php").then(res => {commit("addCount",res.data[0])})}}
})

调用方法一:

<template><p>counter : {{$store.state.counter}}</p><p>counter : {{$store.getters.getCount}}</p><p>{{getCount}}</p><button @click="add">counter+15操作</button><button @click="addAsyn">异步增加counter操作</button>
</template>
<script>
import { mapGetters, mapMutations} from "vuex"
export default {computed:{...mapGetters(["getCount"])},methods:{...mapMutations(["addCount"]),addAsyn(){this.$store.dispatch("asyncAdd")},add(){//固定调用方式// this.$store.commit("addCount",15)this.addCount(15)}}
}
</script>
<style>
</style>

调用方法二:使用mapMutations获取,即引入后修改methods方法中如下:效果一样

tips:  ({}) 加上花括号代表对象结构赋值

Getter

对vuex中数据进行过滤。

类似于vue中的computed,进行缓存,对于Store中的数据进行加工处理形成新的数据。

第一种

import { createStore } from "vuex";
// const store = createStore({// })
// export default store;
//或者简写如下
export default createStore({state:{//所有状态(数据都放在state中)counter:0},getters:{getCount(state){return state.counter >0 ?state.counter : "此时的counter<=0"}}
})

调用方法一:

 <p> counter : {{$store.getters.getCount}} </p>

调用方法二:    使用mapGetters

<template><p>{{getCount}}</p>
</template><script>
import { mapGetters } from "vuex"
export default {computed:{...mapGetters(["getCount"])}
}
</script>
<style></style>

结果:

Modules

当遇见大型项目时,数据量大,store就会显得很臃肿

为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割:

引用:

this.$store.state.cityModules.cityname

vue状态管理——Vuex相关推荐

  1. Vue状态管理vuex

    转: https://www.cnblogs.com/xiaohuochai/p/7554127.html 前面的话 由于多个状态分散的跨越在许多组件和交互间各个角落,大型应用复杂度也经常逐渐增长.为 ...

  2. Vue 状态管理 Vuex

    1.概述 Vuex作为插件,管理和维护整个项目的组件状态. 2.安装vuex cnpm i --save vuex 3.vuex使用 github地址:https://github.com/MengF ...

  3. Pinia下一代vue状态管理工具

    建议大家结合上一篇文章学习:vite+vue script setup语法糖写法:style'me的个人博客  1.pinia是什么? Pinia是一个围绕Vue 3 Composition API的 ...

  4. [vuex]状态管理vuex

    vuex 状态管理vuex,之前一般都是通过一个全局js文件实现全局设置,在vue中通过vuex进行管理 简介 vuex是专为vue.js应用程序开发的状态管理模式.它采用集中存储管理应用的所有组件的 ...

  5. 状态管理vuex的规范化使用~~总结

    一.定义 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化 二.安装 cnpm i vuex - ...

  6. Vue开发实例(14)之Vue状态管理store

    引言 Vue是现在前端最流行的框架之一,作为前端开发人员应该要熟练的掌握它,如果你是打算学习Vue的开发流程,那么来吧,明哥带你快速上手.带你飞! 即使你并非前端开发人员,对前端的开发流程进行一定的了 ...

  7. vue总结 08状态管理vuex

    状态管理 类 Flux 状态管理的官方实现 由于状态零散地分布在许多组件和组件之间的交互中,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue 提供 vuex:我们有受到 Elm 启发的状态管理库 ...

  8. VueX(Vue状态管理模式)

    一.初识VueX 1.1 关于VueX VueX是适用于在Vue项目开发时使用的状态管理工具.试想一下,如果在一个项目开发中频繁的使用组件传参的方式来同步data中的值,一旦项目变得很庞大,管理和维护 ...

  9. vue状态管理存取数据_vue状态管理vuex从浅入深详细讲解

    1.vuex简介以及创建一个简单的仓库 vuex是专门为vue框架而设计出的一个公共数据管理框架,任何组件都可以通过状态管理仓库数据沟通,也可以统一从仓库获取数据,在比较大型的应用中,数据交互庞大的情 ...

最新文章

  1. 如何基于Kubernetes构建完整的DevOps流水线
  2. gin context和官方context_Gin框架系列01:极速上手
  3. 机房管理系列之工作站
  4. java判断优先级代码_java运算符的优先级
  5. mysql c 中文字符串_MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法...
  6. python 数学期望_(Python)零起步数学+神经网络入门
  7. 5·29 深圳 | 百度大脑生态合作计划及 AI 市场发布会即将登场
  8. cacti-0.8.8a那点儿事
  9. 海量小文件的开源存储方案选型建议
  10. spite用法 java_despite 和in spite of 用法
  11. RN开发系列<2>--基本调试
  12. 机试学习笔记07 -- 斐波那契数列、素数判定、素数筛选、二分快速幂、分解素因数、常见数学公式总结、规律神器OEIS、高精度问题
  13. 小Z解读:企业证书利用itms-services协议分发应用在蜂窝网络下的限制
  14. 查询ES(ElasticSearch)版本
  15. Windows10系统右键无法新建文本文档解决方案
  16. 再见,2017,你好,2018
  17. linux 查看java版本
  18. 2018.12.31 NOIP训练 czy的后宫6(线性dp)
  19. 如何启动app和exe程序
  20. 工作岗位必备技能总结

热门文章

  1. 最小操作数,木块砌墙问题
  2. 端口转发映射详解、代理反向代理深入认知
  3. 北京面向社会招录消防员900人 将实行全程退出机制
  4. uni-app运行到手机上,提示request:fail abort statusCode:-1 Failed to connect to localhost/127.0.0.1:8080
  5. 风色幻想ol服务器文件,开个魔导帖吧,总结下GF52的经验,服务器好像down了,写给新手,顺便问...
  6. 老子简介(函谷关道德经)
  7. 一张图阐述UML状态图的画法【软件工程】
  8. column属性 extjs_extjs动态改变 grid column Header属性
  9. 马斯克个人2021年向美国缴税110亿美元,特斯拉却是0元
  10. ESP8266 整理篇:unity如何接收 (下下)