首页IT科技vue中@表示(【vue】vuex中modules的基本用法)

vue中@表示(【vue】vuex中modules的基本用法)

时间2025-05-02 16:27:38分类IT科技浏览3904
导读:1,什么时候用modules...

1           ,什么时候用modules

由于使用单一状态树               ,应用的所有状态会集中到一个比较大的对象           。当应用变得非常复杂时      ,store 对象就有可能变得相当臃肿                 。

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

在模块中使用:namespaced: true, 命名空间               ,添加之后         ,当前模块下的标识符可以和其它模块相同,用于解决不同模块的命名冲突问题

2      ,store文件结构

3.1 index.js中手动引入modules

import Vue from vue import Vuex from vuex import bus from ./modules/bus import app from ./modules/app const path = require(path) Vue.use(Vuex) let store = new Vuex.Store({ state: { }, mutations: { }, actions: { }, modules: { namespaced: true, app, bus } }); export default store

3.2 index.js 中动态引入modules

import Vue from vue import Vuex from vuex const path = require(path) Vue.use(Vuex) const files = require.context(./modules, false, /\.js$/) let modules = {} files.keys().forEach(key => { let name = path.basename(key, .js) modules[name] = files(key).default || files(key) }) let store = new Vuex.Store({ state: { }, mutations: { }, actions: { }, modules }); export default store

4               ,app.js 文件中代码

let user = { namespaced: true, state: {}, mutations: { setUser(state, val) { state.user = val; } }, getters: {}, actions: { setName(state, val) { return new Promise(resolve => { setTimeout(function () { state.user = val; resolve(state.user); }, 2000) }) } } } export default user;

 5            ,配置main.js   ,挂载store

new Vue({ el: #app, router, store, components: { App: App }, template: <App/> })

6               ,vue中使用

// commit 执行mutations里的方法              ,同步操作 this.$store.commit(app/setUser, {name: 张三}); console.log(this.user.name); // dispatch 执行actions里的方法,异步操作 this.$store.dispatch(app/setName, {name: 李四}).then(res => { console.log(res.name); })

7             ,js中使用

// 引入 这里的store 就相当于页面中的 this.$store import store from @/store export const setCurUser = (user) => { let curUser = store.app.user if(!curUser) { store.commit("app/setUser", user) return user } return curUser }

注意:

1                ,vue和vuex的版本搭配

vue2使用vuex3;vue3使用vuex4. 否则会出现this.$store为undefined错误

延伸:

1   ,vuex的五种状态 state               、getter         、mutation      、action               、module

state:所有共享数据统一放到state中           ,与data类似

mutation: 类似于事件               ,用于改变状态

action: 和mutation相似      ,但是action是异步操作

getter: 类似vue中的computed         ,进行缓存               ,形成新的数据

modules: 分模块         ,大型项目一个对象管理会很臃肿

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
网站关键词优化的步骤和过程(如何做好网站关键词优化排名?) video自动播放没有声音(video 自定义视频播放控件)