store中的 $函数 操作(pinia)

$id

该store的唯一标识符,也就是下面定义store的defineStore函数的第一个参数

export const useCounterStore = defineStore('counter', () => {
  const count = ref(0)
  const doubleCount = computed(() => count.value * 2)
  function increment() {
    count.value++
  }
  ...
}

$dispose

使用这个函数可以使他失效

/**
 * $dispose让他失效
 */
counterStore.$dispose()

使用了之后

$patch

补丁的意思,可用于对state对象进行修改和替换

/**
 * $patch(补丁)用于对state对象进行修改和替换(可一次修改多个数据)
*/
counterStore.$patch({
  count: counterStore.count + 10
})
//要对数组等进行操作的话可以用箭头函数
//例如
// store.$patch((state) => {
//   state.items.push({ name: 'shoes', quantity: 1 })
//   state.hasChanged = true
// })

$subscribe

订阅(主要是订阅state)

/**
 * $subscribe(订阅state)
*/
counterStore.$subscribe((mutation, state) => {
  //console.log(mutation, state);
  /**
    * mutation主要包含三个属性值:
    *   events:当前state改变的具体数据,包括改变前的值和改变后的值等等数据
    *   storeId:是当前store的id(当前store的名字)
    *   type:用于记录这次数据变化是通过什么途径,主要有三个分别是
          “direct” :通过 action 变化的
          ”patch object“ :通过 $patch 传递对象的方式改变的
          “patch function” :通过 $patch 传递函数的方式改变的
    *   payload // 传递给 cartStore.$patch() 的补丁对象。
  */
},
  {
    //detached:布尔值,默认是 false,正常情况下,当订阅所在的组件被卸载时,订阅将被停止删除,
    //如果设置detached值为 true 时,即使所在组件被卸载,订阅依然在生效
    detached: false
  })

$onAction

订阅(订阅方法的调用)

/**
 * $onAction(订阅methods)
 */
const unsubscribe = counterStore.$onAction(
  ({
    name, // action 名称
    store, // store 实例,类似 `someStore`
    args, // 传递给 action 的参数数组
    after, // 在 action 返回或解决后的钩子
    onError, // action 抛出或拒绝的钩子
  }) => {
    // 为这个特定的 action 调用提供一个共享变量
    const startTime = Date.now()
    // 这将在执行 "store "的 action 之前触发。
    console.log(`Start "${name}" with params [${args.join(', ')}].`)

    // 这将在 action 成功并完全运行后触发。
    // 它等待着任何返回的 promise
    after((result) => {
      console.log(
        `Finished "${name}" after ${Date.now() - startTime
        }ms.\nResult: ${result}.`
      )
    })

    // 如果 action 抛出或返回一个拒绝的 promise,这将触发
    onError((error) => {
      console.warn(
        `Failed "${name}" after ${Date.now() - startTime}ms.\nError: ${error}.`
      )
    })
  },
  //true//组件卸载后保存,默认为false
)
//unsubscribe()//手动卸载订阅

$reset

在选项式api中这个函数会根据你的代码中state初始数据进行重置

但在组合式api中这个函数需要在store中重写

function $reset() {
    count.value = 0
  }

$hydrate

手动提取保存在 storage 中的数据,应用首次运行时,会自动提取一次

$persist

应该是安装了persist持久化存储插件才能用

storeToRefs

/**
 * 解构赋值
 * 使用storeToRefs才能完成响应式数据
 * 方法不能用storeToRefs,他根本不返回 
 * 这样写不用counterStore.什么什么
*/
import { storeToRefs } from "pinia";
//直接使用只能返回数据(不是响应式)
//const { count, doubleCount } = counterStore
//console.log(count,doubleCount);
const { count, doubleCount } = storeToRefs(counterStore)
const { increment } = counterStore
// console.log(count, doubleCount);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值