vue-状态管理与Vuex

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
### 状态管理与Vuex       
跨组件共享数据的需求;
### 配置vuex
    npm install --save vuex
 
    修改main.js
        import Vuex from 'vuex';
        Vue.use(Vuex);
        const store = new Vuex.Store({
            <!-- vuex的配置 -->
        })
 
 
        // 创建Vue根实例
        new Vue({
            el: '#app',
            router: router,
            store: store, // 使用vuex
            render: h => h(App)
        })
 
 
        mutations和actions用法:
        const store = new Vuex.Store({
            state: {
                count: 0
            },
            mutations: {
                increment (state, n = 1) {
                    state.count += n;
                }
            },
            actions: {
                increment (context) {
                    context.commit('increment')
                }
            }
        })
 
 
        vue页面使用:
        computed: {
            count() {
                return this.$store.state.count;
            }
        },
        methods: {
            handleActionIncrement() {
                this.$store.dispatch('increment');
            }
        }
 
 
        总结:actions主要是实现异步赋值操作(不做异步,也就没必要在actions中中转一次操作)
 
 
        actions实现异步操作例子:
        const store = new Vuex.Store({
            state: {
                count: 0
            },
            mutations: {
                increment (state, n = 1) {
                    state.count += 1;
                }
            },
            actions: {
                asyncIncrement (context) {
                    return new Promise (resolve => {
                        setTimeout(() => {
                            context.commit('increment');
                            resolve();
                        },1000)
                    });
                }
            }
        })
 
 
        // index.vue代码
        handleAsyncIncrement() {
            this.$store.dispatch('asyncIncrement').then(() => {
                console.log(this.$store.state.count); // 1
            })
        }
### vuex使用modules分割模块
作用:将store分割不同的模块,项目足够大时,方便管理
实例:
const moduleA = {
    state: {...},
    mutations: {...},
    actions: {...},
    getters: {...}
}
 
 
const moduleB = {
    state: {...},
    mutatios: {...},
    actions: {...}
}
 
 
const store = new Vuex.Store({
    modules: {
        a: moduleA,
        b: moduleB
    }
})
 
 
store.state.a // modulesA的状态
store.state.b // modulesB的状态
 
 
注意:module的mutation和getter接收的第一个参数state是当前模块的状态。
在actions和getters中,还可以接收一个参数rootState,来访问根节点的状态。
const moduleA = {
    state: {
        count: 0,
    },
    getters: {
        sumCount (state, getters, rootSate){
            return state.count + rootState.count;
        }
    }
}

 

posted @   小白咚  阅读(62)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示