rol*_*oli 8 vue.js vuejs3 vite pinia
我有一个使用如下设置语法创建的 pinia 商店:
defineStore('id', () => {
const counter = ref(0)
return { counter }
})
Run Code Online (Sandbox Code Playgroud)
使用设置语法一切都运行良好,因为我可以重复使用其他 pinia 商店。
然而,现在我发现需要在其他页面上重新使用 Pinia 商店,但需要重置它们的状态。
例如,在 Vuex 中,我使用registerModule和unregisterModule来实现拥有一个新鲜商店。
注意:该$reset()方法仅针对使用对象语法定义的存储实现,因此这不是一个选项。
注 2:我知道我可以通过创建一个函数来手动完成此操作,在该函数中将所有状态值设置为其初始值
注3:我找到了$dispose,但它不起作用。如果 $dispose 是答案,那么它如何重置两个组件之间的存储?
ton*_*y19 11
您可以使用Pinia 插件$reset()为所有商店添加功能:
在 Pinia 实例上,use()使用接收属性的函数进行调用store。这个功能是一个 Pinia 插件。
深复制store.$state作为初始状态。lodash.clonedeep对于包含嵌套属性或复杂数据类型(例如Set.
定义store.$reset()为一个函数,调用store.$patch()上面的初始状态的深度克隆。
我们使用Object.assign它来使其与对象正常工作,请参见此处。pinia 在定义$resetOptions API时的做法与此相同。
// store.js\nimport { createPinia } from \'pinia\'\nimport cloneDeep from \'lodash.clonedeep\'\n\nconst store = createPinia()\n1\xef\xb8\x8f\xe2\x83\xa3\nstore.use(({ store }) => {\n 2\xef\xb8\x8f\xe2\x83\xa3\n const initialState = cloneDeep(store.$state)\n 3\xef\xb8\x8f\xe2\x83\xa3\n store.$reset = () => {\n store.$patch($state => {\n 4\xef\xb8\x8f\xe2\x83\xa3\n Object.assign($state, initialState)\n })\n }\n})\nRun Code Online (Sandbox Code Playgroud)\n\n请随意阅读基于此答案的文章:如何重置使用函数/设置语法创建的存储
\n