Pinia 状态管理

为什么是 Pinia

  • 体积小(1KB 级)
  • 完整 TypeScript 支持
  • 没有 mutations 概念
  • DevTools 一等公民

Store 写法

export const useUserStore = defineStore("user", () => {
  const profile = ref<Profile | null>(null);
  const isLogin = computed(() => !!profile.value);
  async function fetchMe() {
    profile.value = await api.me();
  }
  return { profile, isLogin, fetchMe };
});

持久化

pinia-plugin-persistedstate,按 store 粒度选择 localStorage / sessionStorage。

路由守卫协作

router.beforeEach 中调用 store 拿用户信息,未登录跳 /login?redirect=...