vue3 使用pinia小记

引入pinia

import { createApp, defineAsyncComponent } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'

const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.mount('#app')

新建stores.js

setup Store语法
与 Vue 组合式 API 的 setup 函数 相似,我们可以传入一个函数,该函数定义了一些响应式属性和方法,并且返回一个带有我们想暴露出去的属性和方法的对象。
Setup Store 中:

  • ref() 就是 state 属性
  • computed() 就是 getters
  • function() 就是 actions

Setup store 比 Option Store 带来了更多的灵活性,因为你可以在一个 store 内创建侦听器,并自由地使用任何组合式函数。不过,请记住,使用组合式函数会让 SSR 变得更加复杂。

import { ref } from 'vue'
import { defineStore } from 'pinia'
//这边引入了一个aes加密用的可以不用
import AES from '@/utils/aes.js'

//根据路由设置菜单选中状态
export const useRouteStore = defineStore('route', () => {
  const key = AES.encrypt('currentId')
  const currentId = ref('')

  if (!currentId.value && !sessionStorage.getItem(key)) {
    changeRoute('hszp')
  } else {
    const cur = sessionStorage.getItem(key)
    currentId.value = AES.decrypt(cur)
  }
  function changeRoute(value) {
     currentId.value = value
     sessionStorage.setItem(key, AES.encrypt(value))
   }

  return { currentId, changeRoute, getCurrentId }
})

使用 Store

虽然我们前面定义了一个 store,但在我们使用

<script setup>
import { useCounterStore } from '@/stores/counter'
// 可以在组件中的任意位置访问 `store` 变量 ✨
const store = useCounterStore()
</script>

你可以定义任意多的 store,但为了让使用 pinia 的益处最大化(比如允许构建工具自动进行代码分割以及 TypeScript 推断),你应该在不同的文件中去定义 store。

一旦 store 被实例化,你可以直接访问在 store 的 state、getters 和 actions 中定义的任何属性。

为了从 store 中提取属性时保持其响应性,你需要使用 storeToRefs()。它将为每一个响应式属性创建引用。当你只使用 store 的状态而不调用任何 action 时,它会非常有用。请注意,你可以直接从 store 中解构 action,因为它们也被绑定到 store 上:

<script setup>
import { storeToRefs } from 'pinia'
const store = useCounterStore()
// `currentId ` 是响应式的 ref
// 同时通过插件添加的属性也会被提取为 ref
// 并且会跳过所有的 action 或非响应式 (不是 ref 或 reactive) 的属性
const { currentId } = storeToRefs(store)
// 作为 action 的 changeRoute 可以直接解构
const { changeRoute} = store
</script>
Pinia 是 Vue.js 的状态管理库,它在 Vue 3 中得到了原生支持。Pinia 是基于 Composition API 设计的,相比于 Vue 2 的 Vuex,Pinia 更简洁、更容易使用,并且拥有了更好的 TypeScript 支持。 要使用 Pinia,首先需要安装它: ```bash npm install pinia ``` 然后,在你的 Vue 3 应用中引入并使用 Pinia: ```javascript import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' const app = createApp(App) // 创建 Pinia 实例 const pinia = createPinia() // 将 Pinia 实例添加到 Vue 应用中 app.use(pinia) app.mount('#app') ``` 接下来,你可以定义你的 store。一个基本的 Pinia store 包含了状态、getters、actions 和选项: ```javascript // src/stores/counter.js import { defineStore } from 'pinia' export const useCounterStore = defineStore('counter', { state: () => { return { count: 0 } }, getters: { doubleCount: (state) => state.count * 2, }, actions: { increment() { this.count++ }, }, }) ``` 在组件中使用 store 的步骤如下: ```vue <template> <div> <p>Count is: {{ counterStore.count }}</p> <p>Double count is: {{ counterStore.doubleCount }}</p> <button @click="counterStore.increment">Increment</button> </div> </template> <script> import { defineComponent } from 'vue' import { useCounterStore } from '../stores/counter' export default defineComponent({ setup() { const counterStore = useCounterStore() return { counterStore, } }, }) </script> ``` 通过以上步骤,你可以在 Vue 3 应用中成功地使用 Pinia 进行状态管理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值