pinia搭配vue3(setup)的使用(保姆级)

我们为什么要使用Pinia

pinia是Vue的一个状态管理库,跨组件通信的一种方式。可以让我们更加方便的组件通信。

Pinia 提供了一个更简单的 API,具有更少的规范,提供了 Composition-API 风格的 API,最重要的是,在与 TypeScript 一起使用时具有可靠的类型推断支持。

话不多说,先来看一个简单的小demo

1.引入包:npm i pinia

2.在main.js里面配置:

import { createPinia } from 'pinia'
  app.use(createPinia())

 3.创建一个store文件夹,store里面再创建一个index.js(注意:一定要加这个return)

import { defineStore } from 'pinia';

export const useStore=defineStore('main',{
    state:()=>{
       return{
        num:10
       }
    }
})

export default useStore;

 4.在页面中使用

import { useStore} from "../store/index"
let store= useStore()

 console.log(store.num,2222);

看看效果,可以看到成功拿到了num的值

接下来就是取值和设置值,才能符合我们的需求

直接修改

 store.num++;
  console.log(store.num,2222);

效果图可以看到num已经自增了

 

 通过$patch进行修改

  store.$patch({
    num:store.num+1
  })
  console.log(store.num,2222);

效果图

 $patch也可以修改多值

  store.$patch(state => {
         state.c++;
         state.num++;
      })

 getters:相当于计算属性,利用defineStore()中的getters属性定义,他们接收状态作为第一个参数一鼓励箭头函数使用

getters:{
        cityVal:(state)=>state.num*2,
    },

使用getters中的cityVal

在要使用.vue文件中

 console.log(333,store.cityVal);

actions:相当于组件中的methods,他们可以使用defineStore()中的actions属性定义,并且它们非常适合定义业务逻辑(既可以是同步也可以是异步)

query是页面中使用过程中传过来的值

    actions:{
        cityVals(query){
          return this.city=query;
        }
    }

页面中的.vue使用:

 直接调用这个方法进行传值

  console.log(store.cityVals('wuhan'));

到这里,pinia的需求已经足够使用了 ,欢迎指正不足