Vuex各种状态的使用

简介: Vuex各种状态的使用

Vuex简介:

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。
调试工具:vue devtools (Vue开发工具)
Vuex就像眼镜:您自会知道什么时候需要它。

Vuex下载及引入

// npm下载 vuex和vue版本对不上会报错
npm install vuex@3 --save // Vue2.x
npm install vuex@4 --save // Vue3.x
// Vuex 引入
// 创建 src -> store -> index.js 文件
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store({ //可以简写为: export default new Vuex.....
  state: { // 在 state 中存放全局数据, 相当于组件中的 data
    num: 0 // 定义数据
  },
  getters: { // 统一的 计算 都放到 getters 内使用(computed)
    getNum(state) {
      return state.num;
    }
  },
  mutations: { // 只有 mutations 才可以让 Vue devtools Vuex内的state改变
  // mutations相当于组件中的methods,但是它不能使用异步方法(定时器、axios)
    addNum(state, payload) { // payload 形参, 有值 + payload, 没值为 undefined.
      return payload ? state.num + payload : state.num + 1;
    }
  },
  actions: { // actions是专门用来处理异步的, 但实际修改状态值的还是mutations
    actionsMethod({commit}) { // commit 为解构, 参数为 content.commit
      commit('addNum'); // 实际数据提交还是mutations, actions的异步方法,要提交到mutations中进行计算
    }
  },
  modules: {
    // 多模块使用
  },
})

  1. state使用
<template>
  // <div>{{$store.state.num}}</div> // 直接调用
  <div>{{num}}</div> // 利用辅助函数
</template>
<script>
import { mapState } from 'vuex'; // 辅助函数引入
export default {
  computed: {
    // mapState放在computed计算属性中
    ...mapState(['num']); // 辅助函数
  }
}
</script>

  1. getters使用
<template>
  // <div>{{$store.getters.getNum}}</div> // 直接调用
  <div>{{getNum}}</div> // 利用辅助函数
</template>
<script>
import { mapGetters } from 'vuex'; // 辅助函数引入
export default {
  computed: {
    // mapGetters放在computed计算属性中
    ...mapGetters(['getNum']); // 辅助函数
  }
}
</script>

  1. mutations使用
<template>
  // <button @click="$store.commit('addNum', 5)">点击加state.num</button> // 直接调用commit提交到mutations
  <button @click="addNum">点击加state.num</button> // 给个点击方法,详见下方methods
</template>
<script>
import { mapMutations } from 'vuex'; // 辅助函数引入
export default {
  methods: {
    // mapMutations 放在methods中
    ...mapMutations (['addNum']); // 辅助函数
    addNum() {
      // this.$store.commit('addNum', 5); // 参数传就加
      this.$store.commit('addNum'); // 不传就只加1
    }
  }
}
</script>

  1. actions使用
<template>
  // <button @click="$store.dispatch('actionsMethod')">点击加state.num</button>
  <button @click="actionsMethod">点击加state.num</button>
</template>
<script>
import { mapActions } from 'vuex'; // 辅助函数引入
export default {
  methods: {
    // mapActions 放在methods中
    ...mapActions (['actionsMethod']); // 辅助函数
    actionsMethod() {
      this.$store.dispatch('actionsMethod'); // 不传就只加1
    }
  }
}
</script>

  1. 辅助函数
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex';
 // ...mapState([])以及...mapGetters([]), 是放在computed计算属性中的
 // ...mapMutations([])以及...mapActions ([]), 是放在methods方法中的

  1. 拆分写法

—-store
——-index.js

// store中的所有属性,都可以拆分成单独的js书写
// store -> index.js 文件
import Vue from 'vue';
import Vuex from 'vuex';
import state form './state.js';
import getters form './getters.js';
import mutations form './mutations.js';
import actions form './actions.js';
Vue.use(Vuex);
const store = new Vuex.Store({ //可以简写为: export default new Vuex.....
  state,
  getters,
  mutations,
  actions 
  modules: {
    // 多模块使用
  },
})

拆分

—-store

——-state.js

——-getters.js

——-mutations.js

——-actions.js

export default { // 在 state 中存放全局数据, 相当于组件中的 data
  num: 0 // 定义数据
}

—-store

——-state.js

——-getters.js

——-mutations.js

——-actions.js

export default { // 统一的 计算 都放到 getters 内使用(computed)
  getNum(state) {
    return state.num;
  }
}

—-store

——-state.js

——-getters.js

——-mutations.js

——-actions.js

export default { // 只有 mutations 才可以让 Vue devtools Vuex内的state改变
// mutations相当于组件中的methods,但是它不能使用异步方法(定时器、axios)
  addNum(state, payload) { // payload 形参, 有值 + payload, 没值为 undefined.
    return payload ? state.num + payload : state.num + 1;
  }
},

—-store

——-state.js

——-getters.js

——-mutations.js

——-actions.js

export default { // actions是专门用来处理异步的, 但实际修改状态值的还是mutations
  actionsMethod({commit}) { // commit 为解构, 参数为 content.commit
    commit('addNum'); // 实际数据提交还是mutations, actions的异步方法,要提交到mutations中进行计算
  }
}

  1. modules使用
// 多模块
// store -> index.js 文件
import Vue from 'vue';
import Vuex from 'vuex';
import getters form './getters.js';
// 多模块引入
import user from './modules/user.js'
Vue.use(Vuex);
const store = new Vuex.Store({ //可以简写为: export default new Vuex.....
  getters,
  modules: {
    // 多模块使用
    user
  },
})

user.js

// Vuex 引入
// 创建 src -> store -> index.js 文件
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store({ //可以简写为: export default new Vuex.....
  // 在 state 中存放全局数据, 相当于组件中的 data
  state: {},
  // 统一的 计算 都放到 getters 内使用(computed), getters 不会修改数据,他只是做到 return 计算数值
  getters: {},
  // mutilation内的方法为同步方法
  // 只有 mutations 才可以让 Vue devtools Vuex内的state改变
  // mutations相当于组件中的methods,但是它不能使用异步方法(定时器、axios)
  mutations: {},
  // actions是专门用来处理异步的, 但实际修改状态值的还是mutations
  actions: {},
})
相关文章
|
5月前
|
JavaScript
状态管理(pinia)
状态管理(pinia)
40 0
|
5月前
|
存储
vuex5种状态?
vuex5种状态?
|
5月前
|
JavaScript 开发者
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
109 4
|
12月前
|
存储 JavaScript
Vue2(状态管理Vuex)
Vue2(状态管理Vuex)
|
2月前
|
存储 JavaScript 开发者
Vuex是如何帮助我们管理状态的
Vuex通过一系列核心概念和规则,帮助我们有效地管理和维护Vue.js应用程序中的状态。
14 4
|
5月前
|
存储 JavaScript 前端开发
【第36期】一文学会Redux状态管理
【第36期】一文学会Redux状态管理
109 0
|
3月前
|
存储
vuex——重置vuex数据
vuex——重置vuex数据
52 0
|
5月前
|
存储 JavaScript 前端开发
vuex的5种状态
vuex的5种状态
26 0
|
5月前
|
JavaScript
Vue状态管理:什么是getters?Vuex中的getters有什么作用?
Vue状态管理:什么是getters?Vuex中的getters有什么作用?
141 3
|
5月前
|
存储 JavaScript 前端开发
第三十三章 使用Redux管理状态
第三十三章 使用Redux管理状态