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

Vue3 使用 Store 的注意事项:官方推荐的方式始终是在 setup 或 composable 函数内部调用 useStore()

在 hook 中错误使用 Store:useStore() 在函数外部调用

import { useUserList } from "@/hooks"; import { useDepartmentStore } from "@/stores"; import type { Department } from "@/types"; import { onMounted, ref } from "vue"; // Store const departmentStore = useDepartmentStore(); // 用户节点树 interface IDepartmentUserTree { // 树节点,部门编号 value: string; // 树节点,部门名称 label: string; // 子节点 children?: IDepartmentUserTree[]; } /** * 部门用户树 hook * @returns */ export const useDepartmentUserTree = () => { // 部门用户树数据 const departmentUserTreeData = ref<IDepartmentUserTree[]>([]); const departments = ref<Department[]>([]); const { userList, fetchUserListData } = useUserList({ immediate: false }); // 创建部门用户树数据 const createDepartmentUserTreeData = () => { departments.value.forEach((department) => { departmentUserTreeData.value.push({ value: department.deptId, label: department.deptName, children: userList.value .filter((user) => user.deptId === department.deptId) .map((user) => { return { value: user.userName!, label: user.moniker! }; }) }); }); }; onMounted(async () => { try { if (departmentStore.departments.length === 0) { const result = await departmentStore.getDepartments(); departments.value = [...result]; } await fetchUserListData(); createDepartmentUserTreeData(); } catch (error) { console.error("Failed to build department-user tree:", error); } }); return { departmentUserTreeData }; }; export default useDepartmentUserTree;

程序启动报错

报错信息:

pinia.js?v=0dde4c6a:1340Uncaught Error: [🍍]: "getActivePinia()" was called but there was no active Pinia. Are you trying to use a store before calling "app.use(pinia)"? Seehttps://pinia.vuejs.org/core-concepts/outside-component-usage.html for help. This will fail in production. atuseDepartmentUserTree.ts:7:25

在 hook 中正确使用 Store:useStore() 在函数内部调用

import { useUserList } from "@/hooks"; import { useDepartmentStore } from "@/stores"; import type { Department } from "@/types"; import { onMounted, ref } from "vue"; // 用户节点树 interface IDepartmentUserTree { // 树节点,部门编号 value: string; // 树节点,部门名称 label: string; // 子节点 children?: IDepartmentUserTree[]; } /** * 部门用户树 hook * @returns */ export const useDepartmentUserTree = () => { // 部门用户树数据 const departmentUserTreeData = ref<IDepartmentUserTree[]>([]); const departments = ref<Department[]>([]); const { userList, fetchUserListData } = useUserList({ immediate: false }); // Store const departmentStore = useDepartmentStore(); // 创建部门用户树数据 const createDepartmentUserTreeData = () => { departments.value.forEach((department) => { departmentUserTreeData.value.push({ value: department.deptId, label: department.deptName, children: userList.value .filter((user) => user.deptId === department.deptId) .map((user) => { return { value: user.userName!, label: user.moniker! }; }) }); }); }; onMounted(async () => { try { if (departmentStore.departments.length === 0) { const result = await departmentStore.getDepartments(); departments.value = [...result]; } await fetchUserListData(); createDepartmentUserTreeData(); } catch (error) { console.error("Failed to build department-user tree:", error); } }); return { departmentUserTreeData }; }; export default useDepartmentUserTree;

import { useUserList } from "@/hooks";

import { useDepartmentStore } from "@/stores";

import type { Department } from "@/types";

import { onMounted, ref } from "vue";

// 用户节点树

interface IDepartmentUserTree {

// 树节点,部门编号

value: string;

// 树节点,部门名称

label: string;

// 子节点

children?: IDepartmentUserTree[];

}

/**

* 部门用户树 hook

* @returns

*/

export const useDepartmentUserTree = () => {

// 部门用户树数据

const departmentUserTreeData = ref<IDepartmentUserTree[]>([]);

const departments = ref<Department[]>([]);

const { userList, fetchUserListData } = useUserList({ immediate: false });

// Store

const departmentStore = useDepartmentStore();

// 创建部门用户树数据

const createDepartmentUserTreeData = () => {

departments.value.forEach((department) => {

departmentUserTreeData.value.push({

value: department.deptId,

label: department.deptName,

children: userList.value

.filter((user) => user.deptId === department.deptId)

.map((user) => {

return {

value: user.userName!,

label: user.moniker!

};

})

});

});

};

onMounted(async () => {

try {

if (departmentStore.departments.length === 0) {

const result = await departmentStore.getDepartments();

departments.value = [...result];

}

await fetchUserListData();

createDepartmentUserTreeData();

} catch (error) {

console.error("Failed to build department-user tree:", error);

}

});

return {

departmentUserTreeData

};

};

export default useDepartmentUserTree;

http://www.jsqmd.com/news/599315/

相关文章:

  • 2025 ICPC 上海市大学生程序设计竞赛 个人补题笔记(正在补题中)
  • 第10章 Mosquitto桥接模式
  • 云原生应用的可观测性最佳实践
  • 别只盯着信号满格:手把手教你用IQview/nxn实测WiFi 2.4GHz的EVM与频谱平坦度
  • Spring Security 2026 最佳实践:构建安全的 Java 应用
  • 『NAS』在飞牛部署PDF全能工具-StirlingPDF
  • AI赋能分析:让快马平台自动完成数据探索与销售预测建模
  • 深度掌握NVIDIA显卡性能调优:5个实战技巧与进阶配置指南
  • MATLAB语音识别 matlab语音识别,可以识别数字0-9,有gui界面,注释齐全,有报告
  • React 技术深度探讨
  • 从GPS到ENU:手把手教你用MATLAB计算卫星方位角(附避坑指南)
  • Spring Data 2026 最佳实践:简化数据访问
  • 龙哥量化:通达信神奇九转_可调参数,11转,13转~~~ ,神奇九转神奇在哪里?为什么神奇?
  • 3步解锁《艾尔登法环》帧率限制:EldenRingFPSUnlockAndMore完整指南
  • Isaac Sim 5与ROS1联合仿真避坑指南:从相机配置到语义标签发送
  • Kali Linux下7z解压vmdk文件的完整教程(含BUUCTF-Misc题目复现)
  • Cadence Allegro 16.6 环境设置保姆级指南:从绘图参数到自动保存,新手避坑必看
  • 该项目旨在实现进行行人和车辆检测,车道线分割,详细结果可如下感兴趣的话点“我想要”和我私聊吧~
  • 从扭环计数器到CDC:一个被遗忘的格雷码应用,如何优雅解决状态机跨时钟域
  • Docker多架构镜像融合实战:从ARM到AMD的完整避坑指南
  • 饲草打包机的设计及其三维造型【农业机械】(论文+5张cad图纸+solidworks三维+动画+答辩】
  • 突破百度网盘限速的开源方案全解析:技术实现与实用指南
  • Go语言的依赖管理:从go mod到go work
  • 黑盒LLM幻觉抑制:10大落地方案全解析
  • 避坑指南:百度地图坐标转换SHP文件时常见的3个错误及解决方法
  • STK Astrogator轨道数据如何无缝导入Matlab做二次分析?一个脚本搞定
  • 在普通硬件上实现实时AI语音交互的技术突破:Neuro开源项目的边缘计算实践
  • 2026 年高端选购指南:如何锁定靠谱和牛牛排品牌推荐清单
  • 如何检测 SEO 网络推广的投资回报率
  • 前端埋点技术实践:从方案选型到工程落地