Usa pinia en la aplicación uni

Tabla de contenido

¿Qué son las Pinias?

la aplicación uni utiliza Pinia

Pinia de referencia en main.js

Crear y registrar módulos

Definir la forma pinia

Opción opciones forma de definir pinia

Use el método de opciones de opción pinia en la página

Manera funcional de definir pinia

La pinia definida en el modo de función en la página.


¿Qué son las Pinias?

Pinia (pronunciado  /piːnjʌ/como en inglés  peenya) es un repositorio de Vue que le permite compartir el estado entre componentes, páginas.

En el lado del servidor, así como en pequeñas aplicaciones de una sola página, también puede obtener muchos beneficios al usar Pinia:

  • Soporte de herramientas de desarrollo

    • Línea de tiempo para rastrear acciones y mutaciones.

    • Mostrar la tienda que usan en el componente

    • Viaje en el tiempo para facilitar la depuración

  •  Reemplazo de módulo caliente

    • Modificar la Tienda sin recargar la página

    • El estado actual se puede mantener durante el desarrollo.

  • Proporcione compatibilidad adecuada con TypeScript y autocompletado para desarrolladores de JS.

imagen

la aplicación uni utiliza Pinia

uni-app tiene Pinia integrado. Los proyectos de Vue 2 aún no son compatibles

El uso de HBuilder X no requiere instalación manual, se puede usar directamente. El uso de la CLI requiere instalación manual, ejecución  yarn add [email protected] o  npm install [email protected].

uni-app tiene una gestión de estado incorporada de vuex y pinia, que se puede usar sin instalación.

Estructura de proyecto sugerida

├── pages
├── static
└── stores // 注意此处
    └── counter.js
├── App.vue
├── main.js
├── manifest.json
├── pages.json
└── uni.scss

Pinia de referencia en main.js

mian.js  hace referencia y usa pinia

//导入pinia
import * as Pinia from  'pinia'

// 创建Pinia实例  // 将pinia实例挂载到vue实例上 
app.use(Pinia.createPinia());

return {
    app,
    Pinia, // 此处必须将 Pinia 返回
} 

código completo main.js

// #ifndef VUE3
import Vue from 'vue'
import App from './App' 

Vue.config.productionTip = false

App.mpType = 'app'

const app = new Vue({
    ...App
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'

//导入pinia  
import * as Pinia from  'pinia'

import App from './App.vue'
export function createApp() {
    const app = createSSRApp(App)

    // 创建Pinia实例  // 将pinia实例挂载到vue实例上 
    app.use(Pinia.createPinia());

    return {
        app,
        Pinia, // 此处必须将 Pinia 返回
    }
}
// #endif

Preste especial atención a la posición de referencia del pinia, de lo contrario se informará un error.

imagen

Crear y registrar módulos

在需要使用全局状态管理的地方,你可以创建一个或多个Pinia模块。每个模块代表一个具体的状态管理单元。

proyecto, nuevo stores文件夹, para almacenamiento 创建和注册的模块

imagen

En stores文件夹, cree un nuevo archivo js ( useCounterStore.js) para almacenamiento 创建和注册的模块

imagen

Definir la forma pinia

选项options方式 definir pinia

useCounterStore.jsEscribe el siguiente código en

import { defineStore } from 'pinia'

// 定义仓库有两种定义方式

// 01 选项options方式
export const useCounterStore = defineStore('counter', {
  // 定义状态
      state:()=>({count:5}),
      // 计算数据
      getters:{
          doubleCount:(state)=>state.count*2
      },
      // 动作支持异步
      actions:{
          setCount(v){
              this.count = v;
          }
      }
})

Use el método de opciones de opción pinia en la página

<template>
    <view>
        pinia 大菠萝doubleCount:{
   
   {doubleCount}}
        <button>{
   
   {count}}</button>
    </view>
</template>

<script>
import {useCounterStore} from "@/stores/useCounterStore.js
// map方泛
import {mapState} from 'pinia';

export default {
    data(){},
    computed: function(){
        // 把pinia 的state映射到页面
        ...mapState(useCounterStore,["count","doubleCount"]
    } ,
    methods:{
        // 把pinia的方法映射到页面
        ...mapActions(useCounterStore,["setCount"])
    }
</script>

Esta forma de escribir es muy similar a vuex, pero sin el método de mutación.

函数方式 definir pinia

Cree un nuevo archivo js ( useColorStore.js) y defina pinia

// 导入定义仓库的方法
import {defineStore} from 'pinia';

// 导入响应式和计算
import {ref} from 'vue'
const  useColorStore = defineStore("color",()=>{
    // 定义一个状态颜色为 默认红色
    const color=ref('red');
    // 定义一个设置状态的方法
    const setColor = v=>{
        color.value = v;
    }
    // 导入
    return {color,setColor}
}) 

export default useColorStore;          

Usar  函数方式 la pinia definida en la página

<template>
    <view class="container">
        <button @click="setColor">更改颜色</button> 
        
        <view :style="'background:'+colorStore.color">
            v-show="isShow"
        </view>
    </view>
</template>

<script setup>
    import useColorStore from '@/stores/useColorStore.js'
    const colorStore = useColorStore() 
    const setColor = () => { 
        colorStore.setColor('#333')
    }  
</script> 

<style lang="less" scoped> 
    .container {
        padding: 0 20px 20px;
        font-size: 14px;
        line-height: 24px;
    }
</style>

malentendido

imagen

documentos de referencia

Supongo que te gusta

Origin blog.csdn.net/qq_44848480/article/details/132270165
Recomendado
Clasificación