Uso de Pinia

Pasos para el uso:

  • Instalar
yarn add pinia
# or
npm i pinia
  • Importe, cree instancias, utilícelo como un complemento y use la misma rutina que otros complementos

Para un mejor mantenimiento funcional, importe la instancia pinia debajo del archivo de la tienda

tienda/index.ts

Descargue el complemento de persistencia de almacenamiento de datos

npm i pinia-plugin-persistedstate
/**
 * 功能:维护pinia
 * 创建的pinia仓库从这里统一导出
 */
import { createPinia } from 'pinia'
// pinia-plugin-persistedstate 持久化存储插件
import persist from 'pinia-plugin-persistedstate'

const pinia = createPinia()

// vue使用pinia插件 .use(pinia里面的插件-持久化存储)
pinia.use(persist)

export default pinia

// 完整写法
// import { useUserStore } from './user'
// export { useUserStore }
// 统一导出:和上面两行完整写法是等价的
export * from './user'
export * from './modules/consult'

principal.ts 

import { createApp } from 'vue'

import App from './App.vue'
// 引入路由
import router from './router'
// 引入仓库
import pinia from './stores'
// 引入vant样式,(在全局样式前导入方便自定义样式的覆盖)
import 'vant/lib/index.css'
// 引入全局样式
import './styles/main.scss'
import 'virtual:svg-icons-register'

const app = createApp(App)
app.use(router)

app.use(pinia)
app.mount('#app')
  • Crear almacén y usar almacén

tienda/usuario.ts

import { defineStore } from "pinia"
import { computed, ref } from "vue"

// cp-user 持久化存储仓库的名称
export const useUserStore= defineStore("cp-user", () => {
    // 1.用户信息
    const user = ref<User>()
    // 2.修改用户信息
    const setUser = (u: User) => {
      user.value = u
    }
    // 3.删除用户信息
    const delUser = () => {
      user.value = undefined
    }
    return {
       user,
       setUser,
       delUser 
    },
    // 开启持久化,使用本地存储,默认使用localStorage
    { persist: true }
     // {
     //   persist: {
     //     key: 'store-key',
     //     storage: window.sessionStorage,
     //     paths: ['nested.data'],
     //     beforeRestore: (context) => {
     //       console.log('Before hydration...')
     //     },
     //     afterRestore: (context) => {
     //       console.log('After hydration...')
     //     }
     //   }
     // }
})

 La página home.vue presenta datos de la tienda

<script setup lang="ts">

// 引入定义的store仓库 useUserStore
import { useUserStore} from "./store/counter"

// store中有状态和函数
const store = useCounterStore()

console.log(store.user,store.setUser,store.delUser)

</script>

El uso de storeToRefs 

Use storeToRefs para resolver el problema de la capacidad de respuesta de pérdida de estado del almacén deconstruido

pregunta:

  • Cuando queremos deconstruir los datos proporcionados por la tienda, encontramos que los datos no responden.

recordar:

  • Al aprender los datos de respuesta creados por la API combinada de vue, use  toRefs los datos de respuesta que mantienen la estructura

plan:

  • Úselo  storeToRefs para resolver el problema de deconstruir la capacidad de respuesta de pérdida de estado del almacén

código:

  • para la gestión estatal
  // state
  const count = ref(100)
  // getters
  const doubleCount = computed(() => count.value * 2)
  // mutations
  const update = () => count.value++
  // actions
  const asyncUpdate = () => {
    setTimeout(() => {
      count.value++
    }, 1000)
  }
  return { count, doubleCount, update, asyncUpdate }
<template>
  APP {
   
   { store.count }} {
   
   { store.doubleCount }}
  <button @click="store.update()">count++</button>
  <button @click="store.asyncUpdate()">async update</button>
</template>
import { storeToRefs } from 'pinia'

const store = useCounterStore()
const { count, doubleCount } = storeToRefs(store)

resumen:

  • Cuando desee deconstruir el estado correspondiente de la tienda, debe usar storeToRefs

Supongo que te gusta

Origin blog.csdn.net/luoxiaonuan_hi/article/details/131437253
Recomendado
Clasificación