当前位置: 首页 > news >正文

uniapp之vuex在vue2和vue3两种模式下前端工程化动态导入文件

由于最近比较忙,两周没写文章了,今天终于挤出点时间来整理素材了。

前端是一个多样化的工作。初学者肯定都是以最简单有效的方式来开发项目,哪怕是多写都没关系。但是随着经验的增多,发现功能模块化很重要,可以直接运在各种项目中。有一次帮朋友改BUG的时候,我发现他的项目很多功能的思路跟我所写是两个不同的级别,于是我就开始学习大佬们的用法,所以才有了后面开发项目的效率。总结出一句话:站在巨人的肩膀上,才可能得更远。

好了话不多说,今天我就整理关于vuex的工程化目录,这个功能不仅实现了vueX的模块化,还避免了一个项目多人开发产生的冲突。

这里主要介绍的是vuex在uniapp中的运用,在脚手架项目中思路是一样的,可供参考。vue2中的vuex工程化可能比较熟悉,在vue3中可能会有些不一样的使用方法,毕竟vue3用的是vite打包编译。

项目store目录结构:

  • store
    • index.js
    • getters.js
    • modules
      • 各自的功能.js

vuex在vue2中的使用

  • index.js中的处理
import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
Vue.use(Vuex)
const modulesFiles = require.context('./modules', true, /\.js$/);
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
	const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
	const value = modulesFiles(modulePath)
	modules[moduleName] = value.default
	return modules
}, {})
export default new Vuex.Store({
	modules,
	getters:getters
});
  • 功能:set.js
const set = {
	namespaced: true,// 名称是否私有化
	state: {
		num:1
	},
	mutations: {
		SET_NUM(state, data) {
		    state.num = data;
		}
	},
	actions: {
		setNum({ commit }, data) {
			commit('SET_NUM', data);
		}
	}
};
export default set;
  • getters.js
const getters = {
	num: state => state.set.num
}
export default getters;
  • main.js
import Vue from 'vue'
import App from './App'
import store from './store'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
	store,
	...App
})
app.$mount()
  • 在组件中的使用
<script>
	export default {
	    onLoad(){
	        console.log(this.$store.getters.num)
	        
	    },
	    methods:{
	        set(){
	            <!--this.$store.dispatch('set/setNum',2);-->// 异步修改
	            this.$store.commit('set/SET_NUM',2)
	        }
	    }
	}
</script>

还有很多用法,我就不一一述说了…

vuex在vue3中的使用

  • index.js中的处理
import { createStore } from 'vuex';
import getters from '@/store/getters.js';
const modulesFiles = import.meta.globEager('./modules/*.js');
const modules = Object.keys(modulesFiles).reduce((modules, path) => {
	const moduleName = path.replace(/^\.\/modules\/(.*)\.\w+$/, '$1')
	modules[moduleName] = modulesFiles[path]?.default
	return modules
}, {}
)
const store = createStore({
	modules,
	getters
})
export {
	store
}
  • 功能:demo.js
    注意: actions中函数接受的参数与vue2中又区别,使用context.commit
const demo = {
	namespaced: true, // 名称是否私有化
	state: {
		n: 1
	},
	mutations: {
		SET_NUM(state, data) {
			state.n = data;
		}
	},
	actions: {
		setNum(context, data) {
			context.commit('SET_NUM', data);
		}
	}
};
export default demo;

  • getters.js
const getters = {
	num: state => state.demo.n
}
export default getters;
  • main.js
import App from './App'

// #ifndef VUE3
import Vue from 'vue'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
    ...App
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
import { store } from './store/index'
export function createApp() {
  const app = createSSRApp(App)
	app.use(store);
  return {
    app
  }
}
// #endif
  • 在组件中的使用
<script setup>
	import { useStore } from 'vuex';
	const store = useStore();
	console.log(store.getters.num);
	console.log(store.state.demo.n);
	function add(){
		<!--store.dispatch('demo/setNum',Math.random());--> // 异步修改
		store.commit('demo/SET_NUM',999);// 同步修改
	}
</script>

相关文章:

  • css实现三角形的最简单方式原理剖析
  • android4.4.2内核移植3.4.1
  • js正则提取字符串中http等地址
  • 解决 多列 布局 左右等高问题
  • unicloud云函数时间慢8小时的解决方案
  • 前端js实现字符转义和反转义
  • 实时数据库:优势和报价
  • 使用express搭建简单的本地服务器
  • 动手动脑
  • 作为程序员,有哪些神级编程资源呢
  • md5加密
  • 闭包得从底层理解
  • Linux wget auto login and backup database
  • Vue组件里的data为什么是函数,而不是对象
  • webpack的理解和使用
  • hexo+github搭建个人博客
  • [case10]使用RSQL实现端到端的动态查询
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Angular 2 DI - IoC DI - 1
  • CEF与代理
  • in typeof instanceof ===这些运算符有什么作用
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • LintCode 31. partitionArray 数组划分
  • Meteor的表单提交:Form
  • mongodb--安装和初步使用教程
  • MySQL QA
  • python 学习笔记 - Queue Pipes,进程间通讯
  • 飞驰在Mesos的涡轮引擎上
  • 开源SQL-on-Hadoop系统一览
  • 力扣(LeetCode)965
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端面试题总结
  • 试着探索高并发下的系统架构面貌
  • 听说你叫Java(二)–Servlet请求
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二)WCF的Binding模型
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (四)模仿学习-完成后台管理页面查询
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • *上位机的定义
  • ../depcomp: line 571: exec: g++: not found
  • ./和../以及/和~之间的区别
  • .Family_物联网
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .Net core 6.0 升8.0
  • .net framework profiles /.net framework 配置