Pinia的基本使用

定义store
  • 必须使用响应式数据才不会丢失
import { ref } from 'vue'
import { defineStore } from 'pinia'

// 公共数据
export const useShareStore = defineStore('share', () => {
  let selectTime = ref('')

  //也可以用这种方式更新数据,但是好像监听不到数据改变
  const updateTime = (time) => {
    console.log(time, '查询时间改变---')
    selectTime.value = time
  }

  return { selectTime, updateTime }
})
访问state
  • 默认情况下,你可以通过 store 实例访问 state,直接对其进行读写。
import { useShareStore } from '@/stores/index'
const shareStore = useShareStore()
const transInfo = reactive({
  time: shareStore.selectTime
})

重置state

  • 使用选项式 API 时,你可以通过调用 store 的 $reset() 方法将 state 重置为初始值。
const store = useStore()

store.$reset()

变更 state
  • 可以调用 $patch 方法。它允许你用一个 state 的补丁对象在同一时间更改多个属性
store.$patch({
  count: store.count + 1,
  age: 120,
  name: 'DIO',
})
  • $patch 方法也接受一个函数来组合这种难以用补丁对象实现的变更。
store.$patch((state) => {
  state.items.push({ name: 'shoes', quantity: 1 })
  state.hasChanged = true
})

替换 state

  • 你不能完全替换掉 store 的 state,因为那样会破坏其响应性。但是,你可以 patch 它。
// 这实际上并没有替换`$state`
store.$state = { count: 24 }
// 在它内部调用 `$patch()`:
store.$patch({ count: 24 })
  • 你也可以通过变更 pinia 实例的 state 来设置整个应用的初始 state。这常用于 SSR 中的激活过程。
订阅 state
cartStore.$subscribe((mutation, state) => {
  // import { MutationType } from 'pinia'
  mutation.type // 'direct' | 'patch object' | 'patch function'
  // 和 cartStore.$id 一样
  mutation.storeId // 'cart'
  // 只有 mutation.type === 'patch object'的情况下才可用
  mutation.payload // 传递给 cartStore.$patch() 的补丁对象。

  // 每当状态发生变化时,将整个 state 持久化到本地存储。
  localStorage.setItem('cart', JSON.stringify(state))
})
  • 如果你想在组件卸载后依旧保留它们,请将 { detached: true } 作为第二个参数,以将 state subscription 从当前组件中分离:
<script setup>
const someStore = useSomeStore()
// 此订阅器即便在组件卸载之后仍会被保留
someStore.$subscribe(callback, { detached: true })
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值