PINIA:使用设置语法时$重置替代方案
我有一个使用设置语法创建的 pinia 商店,例如:
defineStore('id', () => {
const counter = ref(0)
return { counter }
})
使用设置语法一切都运行良好,因为我可以重复使用其他 pinia 商店。
然而,现在我发现需要在其他页面上重新使用 Pinia 商店,但需要重置它们的状态。
例如,在 Vuex 中,我使用 registerModule
和 unregisterModule
来实现拥有一个新的存储。
所以问题是:如何使用设置语法重置 pinia 存储?
注意:$reset()
方法仅针对使用对象语法定义的存储实现,因此这不是一个选项。
注意 2:我知道我可以通过创建一个函数来手动完成此操作,在该函数中将所有状态值设置为其初始值
注3:我发现$dispose 但它不起作用。如果 $dispose 是答案,那么它如何重置两个组件之间的存储?
I have a pinia store created with setup syntax like:
defineStore('id', () => {
const counter = ref(0)
return { counter }
})
Everything has been working great with setup syntax because I can re-use other pinia stores.
Now, however, I see the need to re-use Pinia stores on other pages but their state needs to be reset.
In Vuex for example, I was using registerModule
and unregisterModule
to achieve having a fresh store.
So the question is: How to reset the pinia store with setup syntax?
Note: The $reset()
method is only implemented for stores defined with the object syntax, so that is not an option.
Note 2: I know that I can do it manually by creating a function where you set all the state values to their initial ones
Note 3: I found $dispose but it doesn't work. If $dispose is the answer, then how it works resetting the store between 2 components?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 Pinia 插件 添加
$reset()< /code> 函数到所有商店:
在 Pinia 实例上,调用
use()
与接收store
属性的函数。该功能是一个 Pinia 插件。深复制
store.$state
作为初始状态。对于包含以下内容的状态,建议使用类似lodash.clonedeep
的实用程序嵌套属性或复杂数据类型,例如Set
。将
store.$reset()
定义为调用store.$patch()
具有上面初始状态的深度克隆。我们使用
Object.assign
使其与对象正常工作请参阅此处。当 定义$ 时,pinia 也会以同样的方式执行自身操作重置选项 API
。演示
随意阅读基于此答案的文章:如何重置使用函数/设置语法创建的存储< /a>
You can use a Pinia plugin that adds a
$reset()
function to all stores:On the Pinia instance, call
use()
with a function that receives astore
property. This function is a Pinia plugin.Deep-copy
store.$state
as the initial state. A utility likelodash.clonedeep
is recommended for state that includes nested properties or complex data types, such asSet
.Define
store.$reset()
as a function that callsstore.$patch()
with a deep-clone of the initial state from above.We use
Object.assign
to make it work properly with objects see here. Same way pinia does itself when defining$reset
for Options API.demo
Feel free to read the article based on this answer: How to reset stores created with function/setup syntax
您可以按照此处文档中的建议执行此操作
You can do this as suggested in the documentation here