vuex核心概念

// vuex中一共有五个状态 State  Getter  Mutation   Action   Module
import Vue from 'vue'
import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({
state: {
},
getters: {
},
// 里面定义方法,操作state方发
mutations: {
},
// 操作异步操作mutation
actions: {
},
modules: {
}
})

State

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

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

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

调用方式

  • 方式一

在标签中直接 调用如:

<p>{{$store.state.name}}</p>
<p>{{$store.state.age}}</p>
  • 方式二
// this.$store.state.全局数据名称如
<script>
export default{
data(){
return{
name:'',
age:this.$store.state.age
}
},
methods:{
giveName(){
thsi.name = this.$store.state.name
}
}
}
</script>
  • 方式三

从vuex中按需导入mapstate函数如:

<script>
import { mapState } from "vuex";
export default{
data(){
return{
}
},
computed: {
...mapState([name, age])
}
}
</script>

Mutation

// 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数:
import Vue from 'vue'
import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({
state: {
name: '张三',
age: 12,
count: 0
},
getters: {
},
// 里面定义方法,操作state方发
mutations: {
addCount(state, num) {
state.count =+ state.count+num
},
reduceCount(state) {
state.count--
}
},
// 操作异步操作mutation
actions: {
},
modules: {
}
})
  • 组件的使用方法
// 方法一
<script>
export default{
data(){
return{
}
},
methods:{
onAddCount(){
this.$store.commit('addCount', 4)
},
onReduce () {
this.$store.commit('reduceCount')
}
}
}
</script> // 方法二
<script>
export default{
data(){
return{
}
},
methods:{
...mapMutations(['addCount','reduceCount'])
onAddCount(){
this.addCount(4)
},
onReduce () {
this.reduceCount()
}
}
}
</script>

Action

Action和Mutation相似,Mutation 不能进行异步操作,若要进行异步操作,就得使用Action
import Vue from 'vue'
import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({
state: {
name: '张三',
age: 12,
count: 0
},
getters: {
},
// 里面定义方法,操作state方发
mutations: {
addCount(state, num) {
state.count =+ state.count+num
},
reduceCount(state) {
state.count--
}
},
// 操作异步操作mutation
actions: {
asyncAdd (context) {
setTimeout(() => {
context.commit('reduceCount')
}, 1000);
}
},
modules: {
}
})

/*
* 调用方式
*/ // 方式一
this.$store.dispatch("asynAdd") // 方式二 methods:{
...mapActions(['asyncAdd '])
onReduce () {
this.asyncAdd()
}
}

Module

mutation主要用于分割

在Vue中State使用是单一状态树结构,应该的所有的状态都放在state里面,如果项目比较复杂,那state是一个很大的对象,store对象也将对变得非常大,难于管理。

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

import Vue from 'vue'
import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({
state: {
},
getters: {
},
// 里面定义方法,操作state方发
mutations: {
},
// 操作异步操作mutation
actions: {
},
modules: {
userinfo: {
state: {
name: '李四'
},
getters: {},
modules: {}
},
header: {
state: {},
getters: {},
modules: {}
},
}
})
  • 获取方式
this.$store.state.userinfo.name

getter

  • getter是对于Store中的数据进行加工处理形成新的数据
import Vue from 'vue'
import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({
state: {
counter: 2
},
getters: {
powerCounter(state) {
return state.counter * state.counter
},
},
// 里面定义方法,操作state方发
mutations: {
},
// 操作异步操作mutation
actions: {
},
modules: {}
})
  • 调用方式
// 方法一

<p>{{$store.getters.powerCounter()}}</p>

// 方法二

<script>
import { mapGetters } from "vuex";
export default{
data(){
return{
}
},
computed: {
...mapGetters(['powerCounter'])
},
methods:{
onAddCount(){
this.powerCounter()
},
}
}
</script>

vuex状态管理器的更多相关文章

  1. VueX状态管理器 的应用

    VueX状态管理器 cnpm i vuex axios -S 1 创建Vuex 仓库 import Vue from 'vue' import Vuex from 'vuex' vue.use(Vue ...

  2. vue项目--vuex状态管理器

    本文取之官网和其他文章结合自己的理解用简单化的语言表达.用于自己的笔记记录,也希望能帮到其他小伙伴理解,学习更多的前端知识. Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态 ...

  3. vuex状态管理,state,getters,mutations,actons的简单使用(一)

    之前的文章中讲过,组件之间的通讯我们可以用$children.$parent.$refs.props.data... 但问题来了,假如项目特别大,组件之间的通讯可能会变得十分复杂... 这个时候了我们 ...

  4. 组件之间的通讯:vuex状态管理,state,getters,mutations,actons的简单使用(一)

    之前的文章中讲过,组件之间的通讯我们可以用$children.$parent.$refs.props.data... 但问题来了,假如项目特别大,组件之间的通讯可能会变得十分复杂... 这个时候了我们 ...

  5. vue状态管理器(用户登录简单应用)

    技术点:通过vue状态管理器,对已经登录的用户显示不同的页面: 一  vue之状态管理器应用 主要用来存储cookie信息 与vue-cookies一起使用 安装:npm install vue-co ...

  6. vuex状态管理-数据改变不刷新

    困惑: 在页面初始化的时候,我提交到vuex状态管理,然后在获取的时候获取不到,我找到了出错的地点,并进行了修改,然后可以获取到状态 但是不知道原因? 定义了如下的state const state ...

  7. 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI

    一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...

  8. vuex状态管理demo

    vuex状态管理主要包含四个概念  mapState,mapMutations,mapGetters,mapActions. 编写vuex文件夹下面的store.js import Vue from ...

  9. 前端Vue框架-vuex状态管理详解

    新人报道!多多关照-多提宝贵意见 谢谢- vuex理解 采用集中式存储管理模式.用来管理组件的状态,并以自定义规则去观测实时监听值得变化. 状态模式管理理解 属性 理解 state 驱动应用的数据源 ...

  10. 前端技术之:如何在vuex状态管理action异步调用结束后执行UI中的方法

    一.问题的起源 最近在做vue.js项目时,遇到了vuex状态管理action与vue.js方法互相通信.互操作的问题.场景如下图所示: 二.第一种解决方法 例如,我们在页面初始化的时候,需要从服务端 ...

随机推荐

  1. 使用elasticsearch-head修改一个索引的副本数

    一.背景 有一个很久以前设置的无副本索引放入了ES集群中,为了提升该索引的稳定性,需要添加一个副本 尝试curl方法失败以及因为es版本太旧(低于5.0.0)用不了kibana,并且用Python修改 ...

  2. web实践学习2

    20201303张奕博 2023.1.25 创建浮岛 如以下 两幅图所示,整个浮岛造型是一个四棱椎,整体分为四部分,顶部是由地面和河流构成的四方体.底部三块是倒置的三角.生成这些三维模型的其实也并没有 ...

  3. PHP面向对象(三)

    对象的引用 代码如下: <?php//类的定义以关键字class开始,类的命名通常以每个单词第一个字母大写    class NbaPlayer{        public $name = & ...

  4. Charles 抓包教程(Mac版)

    Charles 抓包使用教程 (Mac版) Charles简介 Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以 ...

  5. Codeforces 919E Congruence Equation(循环节+数论)

    Link 题意 给$n, m, p, x$,求有多少个$n(1\leq n \leq x)$使得$n·a^{n}=b(\textrm{mod}\;p)$成立 思路 考虑一下左边的循环节长度,由于$n% ...

  6. 1414:【17NOIP普及组】成绩

    1414:[17NOIP普及组]成绩 时间限制: 1000 ms         内存限制: 65536 KB提交数: 27975     通过数: 17779 [题目描述] 牛牛最近学习了 C++入 ...

  7. vite+vue3.0+ts搭建项目

    项目git地址:https://gitee.com/suyong01/vue3-ts-template vue+ts+vite项目初始化 # npm 6.x npm init @vitejs/app ...

  8. 解决多行文本超出显示省略号webpack打包后失效的问题

    开发环境没问题: 但是在打包部署后就失效了: 经过对比后发现是因为: 缺少了 -webkit-box-orient: vertical;  导致 解决方案 : /* ! autoprefixer: o ...

  9. vite 运行或打包出现内存溢出的解决方案

    在使用vite运行或打包时出现了内存耗尽的报错 vite VUE npm run build 报错 npm ERR! code ELIFECYCLE npm ERR! errno 134 内存溢出 n ...

  10. Oracle 详细-创建用户并导入sql文件

       0.基本信息查询SQL   select * from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system select * from all_u ...