Pinia 使用 store 来管理应用程序的状态。我们可以在项目中创建一个或多个 store,每个 store 对应一个特定的状态域。

创建

创建一个 store 需要用到 defineStore 方法:

import { defineStore } from 'pinia'
import { ref } from 'vue'
 
export const useMenuStore = defineStore('menu', () => {
  // 左边栏菜单默认宽度
  const menuWidth = ref("250px")
  
  // 展开或伸缩左边栏菜单
  function handleMenuWidth() {
      menuWidth.value = menuWidth.value == '250px' ? '64px' : '250px'
  }
  
  return { menuWidth, handleMenuWidth }
})

第一个参数是个字符串,通过它定义了一个名为 menu 的全局 store, 注意,名称在应用中必须是唯一的 。另外,将返回的函数命名为 use… 这个格式,它符合组合式函数风格的约定。

defineStore() 的第二个参数可接受两类值:Setup 函数或 Option 对象。上面的代码中,我们在函数内声明了一个 menuWidth 菜单宽度的全局变量,并且是响应式的;然后还定义了一个展开/收缩菜单栏的方法,在该方法中,若当前菜单宽度为 250px 则赋值为 64px, 表示收缩;反之,则展开。最后,将 menuWidth 变量和 handleMenuWidth 方法返回,以供外界调用。

调用

之后需要在登录页面等需要设置/更新/使用全局属性的地方,通过 const store = userStore() 来获取 Store 对象并调用其中的方法。