$subscribe() 订阅状态及其变化
前端精髓
共 2336字,需浏览 5分钟
· 2022-08-15
可以通过 store 的 $subscribe() 方法查看状态及其变化。类似于 Vuex 的 subscribe 方法,订阅 store 的 mutation。
const unsubscribe = store.subscribe((mutation, state) => {
console.log(mutation.type)
console.log(mutation.payload)
})
// 你可以调用 unsubscribe 来停止订阅。
unsubscribe()
之前更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。
const store = new Vuex.Store({
state: {
count: 1
},
mutations: {
increment (state) {
// 变更状态
state.count++
}
}
})
// 要唤醒一个 mutation handler,你需要以相应的 type 调用 store.commit 方法
store.commit('increment', 10)
现在更改 Pinia 的 store 中的状态不再需要自己去写 mutation 方法,除了直接用 store.counter++ 修改 store,你还可以调用 $patch 方法,$patch 方法也接受一个对象或者函数作为参数。
store.counter++
store.$patch({
counter: store.counter + 1,
name: 'Abalam',
})
store.$patch((state) => {
state.items.push({ name: 'shoes', quantity: 1 })
state.hasChanged = true
})
所以默认 MutationType 有三种 'direct' | 'patch object' | 'patch function' 类型。
const unsubscribe = store.$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 // 补丁对象传递给 to cartStore.$patch()
// 每当它发生变化时,将整个状态持久化到本地存储
localStorage.setItem('cart', JSON.stringify(state))
})
订阅 Actions
可以使用 store.$onAction() 订阅 action 及其结果。传递给它的回调在 action 之前执行。
参数 after 处理 Promise 并允许您在 action 完成后执行函数。
onError 允许您在处理中抛出错误。这些对于在运行时跟踪错误很有用。
const unsubscribe = store.$onAction(
({
name, // action 的名字
store, // store 实例
args, // 调用这个 action 的参数
after, // 在这个 action 执行完毕之后,执行这个函数
onError, // 在这个 action 抛出异常的时候,执行这个函数
}) => {
// 记录开始的时间变量
const startTime = Date.now()
// 这将在 `store` 上的操作执行之前触发
console.log(`Start "${name}" with params [${args.join(', ')}].`)
// 如果 action 成功并且完全运行后,after 将触发。
// 它将等待任何返回的 promise
after((result) => {
console.log(
`Finished "${name}" after ${
Date.now() - startTime
}ms.\nResult: ${result}.`
)
})
// 如果 action 抛出或返回 Promise.reject ,onError 将触发
onError((error) => {
console.warn(
`Failed "${name}" after ${Date.now() - startTime}ms.\nError: ${error}.`
)
})
}
)
// 手动移除订阅
unsubscribe()
默认情况下,action subscriptions 绑定到添加它们的组件(如果 store 位于组件的 setup() 内)。意思是,当组件被卸载时,它们将被自动删除。如果要在卸载组件后保留它们,请将 true 作为第二个参数传递给当前组件的 action subscription。
评论
只要状态对了,事儿也就顺了
卖鸡蛋思维,适合各行各业的套用思维没钱时,牢记卖鸡蛋思维。 请一定耐心看完,成就不一样的你自己。When there‘s no money,Remember the thought of selling eggs.卖鸡蛋思维强调的是商业和经济思维的重要性,从商和创业都应该具备这样的思
小Q聊产品
0
原子化状态管理库 Jotai,它和 Zustand 有啥区别?
Jotai 是一个 react 的状态管理库,主打原子化。提到原子化,你可能会想到原子化 CSS 框架 tailwind。比如这样的 css:<div class="aaa"></div>.aaa { font
前端桃园
0
Go 从版本 1.0 到 1.22的性能变化
两年前,我在 1.2 到 1.18 的所有 Go 版本上比较了 GoAWK 解释器的两个不同基准。在本文中,我重新运行这些基准测试,添加缺少的 Go 版本(1.0 和 1.1)以及新版本(1.19 到 1.22)。我还包含了 Go 1.20 中添加的配置文件引导优化 (PGO) 的结果。我将引用我原
GoCN
10
如何使用 JavaScript 阻止屏幕进入睡眠状态
前言在移动设备上,屏幕常亮是一个常见的需求,尤其是在使用 Web 应用时。为了满足这一需求,开发者可以使用JavaScript中的 Wake Lock API 来阻止屏幕进入睡眠状态。本文将详细介绍如何使用这一 API,并讨论其在不同浏览器上的兼容性情况。检查Wake Lock功能的支持情况在使用W
高级前端进阶
655
解锁 Power BI 报表订阅的全新方式
现在我们可以将 Power BI 分页报表订阅发送到 OneDrive 或 SharePoint 。借助此功能,我们可以将完整的报告附件发送到 OneDrive 或 SharePoint,不再受电子邮件附件大小限制的限制。但是,Power BI 对附件的大小有 250M 的限制。任何有权访问 One
PowerBI战友联盟
3
计划赶不上变化的时代,如何规划未来
关注 三分设 和 10 万设计师一起成长 翻阅计划 2024 UED 总监不好当系列 (未来篇) 本文总监故事皆为个人职业发展经验之谈 如有雷同纯属巧合 大家好,我是益达,今天我们继续聊一聊 UED 总监不好当系列话题,讨...
三分设
0
LoRA及其变体概述:LoRA, DoRA, AdaLoRA, Delta-LoRA
来源:Deephub Imba本文约4000字,建议阅读6分钟本文我们将解释LoRA本身的基本概念,然后介绍一些以不同的方式改进LoRA的功能的变体。LoRA可以说是针对特定任务高效训练大型语言模型的重大突破。它被广泛应用于许多...
数据派THU
0
硕士毕业论文:董明珠自恋及其经济后果研究
董老师我是十分尊敬的,此文仅为转载一篇文章,仅用于揭示中国经济的显性问题:CEO通过暴力方式获得的财富自信心暴涨导致整个中国的经济管理水平极其低下,极其这两字或许在目前这阶段真还没用错,都2024年了,老铁...
肉眼品世界
0