• Vue2 之 Vuex - 状态管理


    目录

    一、目录结构

    二、store仓库

    1. index.js文件

    2. mutations.js文件代码

    3. actions.js文件

    4. getters.js文件

    5. 在modules文件夹中,放置页面的vuex模块

    三、组件中使用 Vuex

    1. 引入

    2. state

    01 - 直接使用

    02 - mapState

            传入数组

            传入对象

    3. getters

    01 - 直接使用

    02 - mapGetters

    4. mutations

    01 - 直接使用

    02 - mapMutations

    5. actions

    01 - 直接使用

    02 - mapActions

    6. module

    Vue3 之 Vuex - 状态管理_玄鱼殇的博客-CSDN博客


    一、目录结构

    二、store仓库

    1. index.js文件

    1. import Vue from 'vue'
    2. import Vuex from 'vuex'
    3. Vue.use(Vuex)
    4. import {mutations} from './mutations'
    5. import actions from './actions'
    6. import getters from './getters'
    7. import Session from '../../../sessionStorage.js'
    8. import eat from './modules/eat' //吃模块
    9. import drink from './modules/drink' //喝模块
    10. import play from './modules/play' //玩模块
    11. import happy from './modules/happy' //乐模块
    12. export default new Vuex.Store({
    13. state: {
    14. baseHttpUrl: '',//项目的请求地址
    15. baseHttpFileUrl: '',//项目中下载文件的请求地址
    16. apiBaseParam: {//请求的基本格式
    17. "version": "",
    18. "userId": '',
    19. "token": Session.getItem('abc') ? Session.getItem('abc').token : "",
    20. },
    21. },
    22. modules: {
    23. eat,
    24. drink,
    25. play,
    26. happy,
    27. },
    28. actions,
    29. mutations,
    30. getters
    31. })

    2. mutations.js文件代码

    1. export const mutations = {
    2. // 设置用户userId
    3. PRO_SET_ID(state,value){
    4. state.id = value;
    5. },
    6. // 设置类型
    7. PRO_SET_TYPE(state,value){
    8. state.Type = value;
    9. },
    10. // 设置faceLogo
    11. PRO_SET_FACELOGO(state,value){
    12. state.faceLogo = value;
    13. },
    14. }

    3. actions.js文件

    1. //请求的方法
    2. import {
    3. getEatMessage,
    4. getPlayMessage,
    5. } from '_ser/http.js'
    6. export default {
    7. //获取全部的吃信息,解构出来
    8. getEatMessage({
    9. commit,
    10. state
    11. },data) {
    12. let param = {
    13. page: 1,
    14. pageSize: 10000,
    15. }
    16. return new Promise((resolve, reject) => {
    17. getEatMessage(param).then(res => {
    18. if (res.code == 200) {
    19. //调用mutations中的方法,存储数据
    20. commit('EAT_LIST', res.data)
    21. }
    22. resolve(res)
    23. }).catch(err => {
    24. reject(err)
    25. })
    26. })
    27. },
    28. ...,
    29. ...,
    30. ...
    31. }

    4. getters.js文件

    1. export const getters = {
    2. baseHttpUrl(state){
    3. return state.baseHttpUrl
    4. },
    5. ......
    6. }

    5. 在modules文件夹中,放置页面的vuex模块

    1. /* 吃模块 */
    2. const eat = {
    3. state: {
    4. time: 'oneDay', //一天
    5. },
    6. mutations: {
    7. //宿管模块人员信息的时间
    8. TIME(state, value) {
    9. state.time = value
    10. }
    11. },
    12. getters: {
    13. getTime(state) {
    14. return state.time
    15. }
    16. },
    17. actions: {},
    18. }
    19. export default eat

    三、组件中使用 Vuex

    1. 引入

    import { mapState, mapMutations, mapGetters, mapActions, Store } from "vuex"

    2. state

    01 - 直接使用

    1. <template>
    2. {{ $store.state.baseHttpUrl }}
    3. template>
    4. <script>
    5. export default {
    6. // 2. 代码中使用
    7. mounted() {
    8. console.log(this.$store.state.baseHttpUrl);
    9. }
    10. };
    11. script>

    02 - mapState

            传入数组

    1. computed: {
    2. // 直接映射数据过来,但是可能会和组件当前定义的数据名称产生冲突
    3. ...mapState(["name", "level", "avatarURL"])
    4. }

            传入对象

    1. computed: {
    2. // 传入对象
    3. ...mapState({
    4. // 可以取别名
    5. sName: state => state.name,
    6. sLevel: state => state.level
    7. })
    8. }

    3. getters

    01 - 直接使用

    1. <template>
    2. {{ $store.getters.baseHttpUrl }}
    3. template>
    4. <script>
    5. export default {
    6. // 2. 代码中使用
    7. mounted() {
    8. console.log(this.$store.getters.baseHttpUrl);
    9. }
    10. };
    11. script>

    02 - mapGetters

    1. export default {
    2. computed: {
    3. ...mapGetters(['baseHttpUrl']),
    4. // 取别名
    5. ...mapGetters({
    6. bbbbaseUrl:'baseHttpUrl'
    7. }),
    8. }
    9. };

    4. mutations

    01 - 直接使用

    1. export default {
    2. methods: {
    3. btnClick() {
    4. // 调用mutation中的PRO_SET_ID方法
    5. this.$store.commit('PRO_SET_ID', 666);
    6. }
    7. }
    8. }

    02 - mapMutations

    1. export default {
    2. methods: {
    3. ...mapMutations(["PRO_SET_ID"]),
    4. ...mapMutations({
    5. // 取别名
    6. aaaaaa:"PRO_SET_ID"
    7. }),
    8. btnClick() {
    9. // 直接调用
    10. this.PRO_SET_ID(666);
    11. }
    12. }
    13. }

    5. actions

    01 - 直接使用

    1. export default {
    2. methods: {
    3. btnClick() {
    4. // 调用actions中的getEatMessage,并传入数据
    5. this.$store.dispatch('getEatMessage', 666);
    6. }
    7. }
    8. };

    02 - mapActions

    1. export default {
    2. methods: {
    3. ...mapActions(['getEatMessage']),
    4. ...mapActions({
    5. // 取别名
    6. aaaa:'getEatMessage'
    7. }),
    8. btnClick() {
    9. // 直接调用
    10. this.getEatMessage(666);
    11. }
    12. }
    13. };

    6. module

    懒得写啦,这里一样哒,哦豁~

    Vue3 之 Vuex - 状态管理_玄鱼殇的博客-CSDN博客

  • 相关阅读:
    事务(Transaction)逻辑应用
    CRM客户管理软件对出海企业的帮助与好处
    【元宇宙】数字孪生,为智能社会赋能
    vue3 | 数据可视化实现数字滚动特效
    架构师之路3. 富士康 - 再也不见
    SQLServer重建所有索引
    Java项目:SSM个人博客网站管理系统
    Go语言学习(六)切片
    IDEA回滚代码
    计算两个图形遮盖率
  • 原文地址:https://blog.csdn.net/a15297701931/article/details/127307477