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=...。