$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);