Pinia

59 阅读1分钟

Pinia的开始

​ 安装

npm install pinia

​ Main.ts中的基本配置

import { createPinia } from 'pinia'
const pinia = createPinia();
const app = createApp(App);
app.use(pinia)   //只能说顺序很重要
app.mount('#app')

Store的配置

// 定义状态容器 state
// 修改容器 gettes
//仓库中的数据派发actions

import {defineStore} from 'pinia' //引入一个定义仓库
export const mainStore = defineStore('main',{
        // defineStore接受2个参数,一个是字符串参数 一个是配置对象
        // 它所接收的字符串参数相当于是命名空间
        state:()=> {
            return {
                hellworld :'Hello World'
            }
        },

        getters:{}, //相当于计算属性用来监听state的变化

        actions:{} //派发请求
})

Pinia的使用

一、通过引用仓库即可传递数据
<template>
    <div>{{store.hellworld}}</div>
</template>
<script setup lang="ts">
    import {mainStore} from '../store/index'
    const store = mainStore();

</script>
二、storeToRefs的使用

有的时候store所提供的数据会出现丢失响应式的问题,这个时候就可以使用storeToRefs去解决这个问题

<template>
    <div>{{store.hellworld}}</div>
    <div>{{store.count}}</div>
    <hr/>
    <!-- 通过结构的方式来把数据写在模板上 -->
    <!-- 如果是这样子去写的话就会丢失数据响应 -->
    <div>{{hellworld}}</div>
    <div>{{count}}</div>
    <!-- 这个时候可以通过storeToRefs -->

</template>
<script setup lang="ts">
    import {mainStore} from '../store/index'
    import {storeToRefs} from 'pinia'

    const store = mainStore();
    const {hellworld,count} = storeToRefs(store)
    // 通过这种方式可以解决数据丢失响应式的问题
</script>


三、Pinia修改状态数据的方式
  // 第一种基本方法
    const change=()=>{
        store.count++
    };

    // 第二种方式 $patch
    // $patch适用于修改多个数据状态使用/单个也没问题
    const jian=()=>{
        store.$patch({
            count:store.count -1
        })
    };

    // 第三种方式 通过$patch传递函数
    const chen=()=>{
        store.$patch((state)=>{
            state.count +2
        })
    }
    // 第四种方式 直接把业务逻辑写到actions里面
四、Gettes的用法
//让号码的中间四位隐藏
state:()=> {
       return {
         phone:13535612551}},
        getters:{
            phoneHidden(state){
            //定义一个方式
            console.log('Getters被调用');
        	return state.phone.toString().replace(/^(\d{3})\d{4}						(\d{4})$/,'$1****$2')
            }
        }
        
   //然后去对这个方法进行一个调用
       <div>{{store.phoneHidden}}</div> //就能得到结果

五、Pinia中store的互相调用

store/two.ts
	import {defineStore} from 'pinia'
	export const twoStore = defineStore({
    state:()=>{
        return{
            list:[1,2,3,4,5]
        }
    }
})

store/index.ts
import {two} from './two' //引入另一个数据仓库
actions:{
         getList(){
          console.log(two().list); //因为即使是引入过来它还是一个方法             
          }
          
    //定义按钮点击吧它打印出来
    const getlist=()=>{
        store.getList()
    }