pinia 使用

使用步骤

1.下载pinia

npm i  pinia

2.在main.js中引入pinia

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

3.在src目录下创建store文件夹 --> index.js

option store

    import { defineStore} from 'pinia'
    export  const useAgeStore  =  defineStore('dingding',{
      state:() =>{  //相当于vue中的data  防止数据污染  // 为了完整类型推理  推荐使用箭头函数
           return  {age:30,name:"张三",arr:[1,2,3,4]}
      }getters :{  //相当于computed 计算属性
         gettersAge(state) {
           return state.age +5
         }
      },
      action:{ //相当于methods
            addAge(){
              //this 指向对应的store 仓库
              this.age ++
            }
      }
    })

setUp store

    import { defineStore} from 'pinia'
    import {computed ,ref } from 'vue'
    export   const useCounterStore  =  defineStore('main',{
      const counter = ref(30)  //state
      const gettersCounter = computed(()=>{  //getters
          return counter.value ++
      })
      function addCounter (){   //actions
            counter.value ++
      } 
      return {counter,gettersCounter ,addCounter }
    })

4.在home.vue中 使用

<script  setup>
   import {useAgeStore , useCounterStore  } from '@/store/index.js'
  import {storeToRefs} from 'pinia'
   const ageStore = useAgeStore()
   const counterStore = useCounterStore() 
   //结构  但是页面不是响应
   count  {counter ,gettersCounter addCounter }  = counterStore 
   //通过storeToRefs 确保页面响应 方法不能storeToRefs结构
    count  {counter ,gettersCounter}  =storeToRefs(counterStore)  //数值结构
    count  { addCounter }  = counterStore 
</script>
 option store
{{ageStore.age}}
{{ageStore.gettersAge}}
<button  @click="ageStore.addAge">修改age</button>
setUp stort
{{counterStore.counter }}
{{counterStore .gettersCounter }}
<button  @click="counterStore.addCounter ">修改counter</button>

 //结构  但是页面不是响应破坏掉响应式 解决办法
 {{counter}}
{{gettersCounter }}
<button  @click="addCounter">修改counter</button>

修改 store 状态

<script  setup>
   import {useAgeStore  } from '@/store/index.js'
   const ageStore = useAgeStore()
   function changeAge(){
       //直接修改  方式一
      ageStore.age++
      //批量修改  方式二
      ageStore.$patch({
         age:40,
         name:"张三丰",
         arr:[...ageStore.arr,5]
      })
      //批量修改 $path(函数) 强烈推荐  方式三
      ageStore.$patch((state)=>{
           state.age = 40
           state.name = "张三丰",
           state.arr.push(5)
      })
      //逻辑复杂的时候  封装到actions中的函数  方式四
   }
</script>
 option store
<button  @click="changeAge">修改age</button>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值