无厘头 -- 基于vue 公用状态机,已用于放置类篮球卡牌Game

引入 Piniaa

bash 复制代码
npm install pinia
# or yarn add pinia

或者

bash 复制代码
"dependencies": {
    "@ckpack/vue-color": "^1.4.1",
    "@element-plus/icons-vue": "^2.0.10",
    "axios": "^1.3.2",
    "element-plus": "^2.2.29",
    "lodash-es": "^4.17.21",
    "pinia": "^2.0.28",
    "vue": "^3.2.45",
    "vue-hooks-plus": "1.6.0-alpha.2",
    "vue-router": "^4.1.6",
    "vue3-moveable": "^0.18.1"
  },

完整 vue (公用状态) 代码如下:

关键是用了 pinia 这个库,好像专门用于保存状态

javascript 复制代码
import { ref, watchEffect } from 'vue';
import { defineStore } from 'pinia';

export const usePageState = defineStore('pageState', () => {
  const pageTitle = ref('视频编辑(CcClip)');
  // 暗色模式
  const isDark = ref(localStorage.theme !== 'light');
  const isLoading = ref(localStorage.loadingPage === '1');
  const hideSubMenu = ref(localStorage.showSubmenu === '0');
  watchEffect(() => {
    console.log(`switch to ${isDark.value ? 'dark' : 'light'}`);
    localStorage.theme = isDark.value ? 'dark' : 'light';
    localStorage.loadingPage = isLoading.value ? '1' : '0';
    localStorage.hideSubMenu = hideSubMenu.value ? '1' : '0';
    document.documentElement.classList[isDark.value ? 'add' : 'remove']('dark');
  });

  // 属性宽度
  const attrWidth = ref(parseInt(localStorage.attrW || '320'));
  // 轨道高度
  const trackHeight = ref(parseInt(localStorage.trackH || '380'));
  watchEffect(() => {
    localStorage.attrW = attrWidth.value;
    localStorage.trackH = trackHeight.value;
  });

  return {
    hideSubMenu,
    isLoading,
    pageTitle,
    isDark,
    attrWidth,
    trackHeight
  };
});

调用方法

javascript 复制代码
import { usePageState } from "../usePageState";
private store = usePageState();
console.log('ffff.isDark= ',this.store.isDark)

无厘头 - tsconfig.json 片段(支持 @别名)

javascript 复制代码
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  }
}

多个Vue 文件可公用一个状态

例如,可用于当前金币,任务列表啊,和技能等级等等;

即使是列表,也是公用存储所有的数据,按照item _id 获取单个数据,再一行行显示;

没那么简单

javascript 复制代码
import { useUserStore } from '@/stores/user'
import { createPinia } from 'pinia'
import { createApp } from 'vue'
import App from './App.vue'

// ❌ 这里会报错,因为 pinia 还没创建
const userStore = useUserStore()

const pinia = createPinia()
const app = createApp(App)
app.use(pinia)

app.mount('#app')

也就是要初始化一下,之前一直是 AI 做的,所以根本不清楚

以为 import 即可用,不是的,要初始化

javascript 复制代码
import { useUserStore } from '@/stores/user'
import { createPinia } from 'pinia'
import { createApp } from 'vue'
import App from './App.vue'

const pinia = createPinia()
const app = createApp(App)
app.use(pinia)

// ✅ 在 app.use(pinia) 之后调用才安全
const userStore = useUserStore()

无厘头-参考:Unity插件2D Tilemap Editor入门

之后再用AI做一个地图工具吧,暂时没有Tilemap 地图的需求

https://www.youtube.com/watch?v=hx3ieBzVNg0

相关推荐
码艺-Alimjan1 天前
Tauri 网站To桌面应用实战总结
前端·javascript·vue
MayBaymax2 天前
MQ 基础概念与架构
java·中间件·架构·java-rocketmq
liangshiwei4 天前
ABP x Vue:介绍 ABP Vue UI
vue·abp
染指11104 天前
134.Agent-多Agent框架-LangChain多智能体
人工智能·中间件·langchain·agents
code_slave(码畜)4 天前
微服务架构落地:公共中间件层总览——不承载业务,只承载稳定性
spring boot·spring cloud·微服务·中间件·架构
frjc5 天前
前端技术选型:主流方案对比与落地建议
vue·react·angular
ss2735 天前
AI全栈实战 | 2.3-01 组件库实战:Element Plus 怎么搭出专业界面,过度封装为什么成维护负担
前端·javascript·elementui·vue
今年下半年6 天前
【Spring Boot】多种存储文件(FastDFS / MinIO / 阿里云 OSS)接入设计说明(附源码)
spring boot·分布式·中间件·简单工厂模式·策略模式
青山木6 天前
秒杀系统设计(二):数据正确性——防超卖、分布式锁与一人一单
分布式·后端·mysql·中间件·架构
Maiko Star7 天前
* LangChain 自定义中间件详解:Hook、装饰器、类与执行顺序
中间件·langchain