当前位置:网站首页 > Vue.js开发 > 正文

模块化使用vuex

一,安装vuex

npm install vuex 

二,src下新建store文件夹及module文件夹和index.js文件

在这里插入图片描述

三,编写index.js

import { 
    createStore } from 'vuex'; import user from './modules/user'; import payWay from './modules/payWay'; import wallet from './modules/wallet'; import themeColor from './modules/themeColor'; import channel from './modules/channel'; const store = createStore({ 
    state: { 
    tabBar: 0 }, getters: { 
   }, actions: { 
   }, mutations: { 
    setTabBarActive(state, val) { 
    state.tabBar = val; } }, modules: { 
    user, wallet, themeColor, channel, payWay }//这里是分了这么多个模块,引入 }); export default store; 

四,在main.js中引入

import { 
    createApp } from 'vue'; import App from '@/App.vue'; import store from './store/index.js'; const app = createApp(App); app.use(store).mount('#app'); 

五,在页面中的使用

在这里插入图片描述
也就是页面中调用模块的方法的时候,需要用store.dispatch(‘模块名/模块中的方法名’)的形式。
也就是说在页面文件中,通过下图方式来访问vuex中的属性和方法:
在这里插入图片描述

六,在vue3中使用需要注意的

在vue3中,会需要区分响应式数据和非响应式数据
直接取值,是不具备响应式的(也就是vuex中的colorObj变化之后,这里获取到的数据不会随之变化)

const colorObj =store.state.themeColor.colorObj; 

使用couputed返回的则是具备响应式的:

const totalAmount = computed(() => store.state.wallet.totalAmount); 

另外,需要注意的是解构赋值会导致响应式的丢失:

const { 
   totalAmount} = computed(() => store.state.wallet); 

七,使用插件,让vuex中的数据持久化

主要是因为页面刷新之后,vuex中的数据会丢失,为了解决这一问题,可以把数据存在sessionStorage中,基于这个原理,有这个插件:

npm install vuex-persistedstate 

然后再在store/index中进行使用(下面代码中注释掉的部分):

import { 
    createStore } from 'vuex'; // import createPersistedState from 'vuex-persistedstate'; import user from './modules/user'; import payWay from './modules/payWay'; import wallet from './modules/wallet'; import themeColor from './modules/themeColor'; import channel from './modules/channel'; const store = createStore({ 
    state: { 
    tabBar: 0 }, getters: { 
   }, actions: { 
   }, mutations: { 
    setTabBarActive(state, val) { 
    state.tabBar = val; } }, modules: { 
    user, wallet, themeColor, channel, payWay } // 引入进vuex插件// 将vuex中的内容存储到sessionStorage中保证刷新不丢失数据,会导致vue-devtools失效,开发时可注释 // plugins: [ // createPersistedState({ 
    // storage: window.sessionStorage // }) // ] }); export default store; 

但是这个插件,目前我使用了之后,会导致vue-devtool无法实时反馈vuex中的数据哈。

七,一些思考

实际上,Vuex 就是一个公用版本的 ref,提供响应式数据给整个项目使用。
1,啥时候使用vuex,啥时候仅仅把数据放在页面文件中呢?
对于一个数据,如果只是组件内部使用就是用 ref 管理;如果我们需要跨组件,跨页面共享的时候,我们就需要把数据从 Vue 的组件内部抽离出来,放在 Vuex 中去管理。

到此这篇模块化使用vuex的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • vue3开启eslint之后报错:error Parsing error: ‘>‘ expected2024-12-03 15:00:04
  • vue中动画效果的实现2024-12-03 15:00:04
  • js中的同步与异步的理解2024-12-03 15:00:04
  • webpack5学习与实战-(六)-babel-loader解析js文件2024-12-03 15:00:04
  • vue2使用脚手架配置prettier报错:‘prettier/prettier‘: context.getPhysicalFilename is not a function2024-12-03 15:00:04
  • vue3的语法使用总结api2024-12-03 15:00:04
  • vue项目history路由的配置2024-12-03 15:00:04
  • copyWebpackPlugin的使用及常见问题(glob及Path ............... is not in cwd)2024-12-03 15:00:04
  • 安装vue-devtool2024-12-03 15:00:04
  • vue+webpack5项目中全局引入scss2024-12-03 15:00:04
  • 全屏图片