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

uniApp 封装VUEX

Vuex Store (index.js)

import Vue from 'vue';
import Vuex from 'vuex';
import Cookies from 'js-cookie';Vue.use(Vuex);const saveStateKeys = ['vuex_user', 'vuex_token', 'vuex_demo'];const initialState = {vuex_user: { name: '用户信息' },vuex_token: Cookies.get('token') || '',vuex_isdev: false,vuex_version: '1.0.1',vuex_demo: '绛紫',vuex_testStore: '测试vuexStore',
};const store = new Vuex.Store({state: {...initialState,},mutations: {},actions: {dynamicAction(context, payload) {return new Promise((resolve, reject) => {context.commit(payload.type, payload.value).then(resolve).catch(reject);});},},
});// 动态生成 mutations 和 actions
const createMutation = (key) => (state, value) => {state[key] = value;saveLifeData(key, value);if (key === 'vuex_token') {Cookies.set('token', value);}
};const createAction = (key) => ({ commit }, value) =>new Promise((resolve, reject) => {commit(`SET_${key.toUpperCase()}`, value).then(resolve).catch(reject);});saveStateKeys.forEach(key => {store.commit(`ADD_MUTATION_${key.toUpperCase()}`, createMutation(key));store.commit(`ADD_ACTION_${key.toUpperCase()}`, createAction(key));
});function saveLifeData(key, value) {if (saveStateKeys.includes(key)) {let tmp = uni.getStorageSync('lifeData') || {};tmp[key] = value;uni.setStorageSync('lifeData', tmp);}
}export default store;

Mixin ($u.mixin.js)

import { mapState, mapActions } from 'vuex';
import store from '@/store';const $uStoreKey = Object.keys(store.state);const dynamicMapActions = (actionsObj) => {return Object.fromEntries(Object.entries(actionsObj).map(([actionName, action]) => [actionName,action.bind(null, store.dispatch),]));
};module.exports = {beforeCreate() {this.$u = {vuex: (name, value) => {if (value !== undefined) {this[`update${name.charAt(0).toUpperCase() + name.slice(1)}`](value);} else {return this[name];}},};},computed: {...mapState($uStoreKey.filter(key => key.startsWith('vuex_'))),},methods: {...dynamicMapActions({...store._modulesNamespaceMap['dynamic'].namespacedActions,}),},
};

使用示例

<template><div><h1>欢迎,{{ user.name }}!</h1><button @click="changeName">更改名字</button></div>
</template><script>
import uMixin from '@/mixins/u.mixin.js';export default {mixins: [uMixin],onShow() {this.$u.vuex('vuex_user', { name: '新用户' });console.log('初始用户信息:', this.$u.vuex('vuex_user'));},methods: {changeName() {this.$u.vuex('vuex_user', { name: '新用户' });},},
};
</script>

全局混入

import Vue from 'vue'
import store from '@/store';
// 引入uView提供的对vuex的简写法文件
let vuexStore = require('@/store/$u.mixin.js');
Vue.mixin(vuexStore);
const app = new Vue({store
})
app.$mount()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【HarmonyOS NEXT】鸿蒙如何让List组件不满一屏时,还要能滑动和回弹
  • ONLYOFFICE8.1版本桌面编辑器测评
  • 白骑士的C语言教学高级篇 3.5 性能优化
  • 生物化学笔记:电阻抗基础+电化学阻抗谱EIS+电化学系统频率响应分析
  • 初步认识 B树(B-tree)
  • 如何使用 SwiftUI 构建 visionOS 应用
  • ActiveMq工具之管理页面说明
  • kotlin 中 string array 怎么表示
  • 通信软件开发之业务知识:PON口割接什么意思?
  • 单例模式之饿汉式
  • 自定义控件之绘图篇(三)区域(Range)
  • CTFShow的RE题(三)
  • 2024年水利水电安全员考试题库及答案
  • python自动化办公之cryptography加密解密
  • 【论文解读】AGENTLESS:揭开基于LLM的软件工程代理的神秘面纱,重塑软件工程自动化新基线
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [iOS]Core Data浅析一 -- 启用Core Data
  • iOS 系统授权开发
  • java8 Stream Pipelines 浅析
  • js作用域和this的理解
  • maya建模与骨骼动画快速实现人工鱼
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spring核心 Bean的高级装配
  • underscore源码剖析之整体架构
  • 高度不固定时垂直居中
  • 搞机器学习要哪些技能
  • 聊聊sentinel的DegradeSlot
  • 前端自动化解决方案
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小程序开发中的那些坑
  • 携程小程序初体验
  • 一个项目push到多个远程Git仓库
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​如何使用QGIS制作三维建筑
  • #etcd#安装时出错
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • $.ajax中的eval及dataType
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (十三)MipMap
  • (算法)Game
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)人的集合论——移山之道
  • (转)为C# Windows服务添加安装程序
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)