无厘头 -- 基于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

相关推荐
喵了几个咪1 天前
GoWind ShortPlay 拆解:Ent privacy/viewer 多租户隔离——从中间件到 SQL 的零信任链
sql·中间件·信任链
ctlover2 天前
langchain 中间件
中间件·langchain·1024程序员节
悟道书生2 天前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
mewowaBc2 天前
使用Pinia持久化存储实现用户认证系统
vue·pinia·用户认证系统
gc_22993 天前
使用VS Code终端创建Vue项目报错:“npm : 无法加载文件 ...\npm.ps1,因为在此系统上禁止运行脚本”
vue·vs code
小阿鑫3 天前
尤雨溪 : Vue 4 已经在规划中了!
vue·vite·vite+·程序员海军·vue4
离歌漠4 天前
《我用 Tauri 做了一个本地开发工具箱》
rust·typescript·vue
enjoy编程4 天前
playwright学习-I
typescript·vue·nodejs·1024程序员节·playwright
宝贝儿好4 天前
【LLM】第十一章:Agent中间件2:ModelCallLimitMiddleware
中间件
梦影_6 天前
Langchain简单快速上手教程(九)—— 核心组件之少样本提示
人工智能·python·自然语言处理·中间件·langchain