- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 pinia 商店,使用如下设置语法创建:
defineStore('id', () => {
const counter = ref(0)
return { counter }
})
一切都与设置语法配合得很好,因为我可以重复使用其他 pinia 商店。
但是,现在我看到需要在其他页面上重新使用 Pinia 存储,但需要重置它们的状态。
例如,在 Vuex 中,我使用 registerModule
和 unregisterModule
来实现拥有一个新的存储。
注意:$reset()
方法仅针对使用对象语法定义的商店实现,因此这不是一个选项。
注意 2:我知道我可以通过创建一个函数来手动完成此操作,您可以在该函数中将所有状态值设置为其初始值
注意 3:我找到了 $dispose但它不起作用。如果 $dispose 是答案,那么它如何在 2 个组件之间重置存储?
最佳答案
您可以使用 Pinia plugin为所有商店添加一个 $reset()
函数:
在 Pinia 实例上,调用 use()
具有接收 store
属性的函数。这个函数是一个 Pinia 插件。
深度复制 store.$state
作为初始状态。类似 lodash.clonedeep
的实用程序建议用于包含嵌套属性或复杂数据类型的状态,例如 Set
。
将 store.$reset()
定义为调用 store.$patch()
的函数从上面深度克隆初始状态。为了删除对副本本身的引用,再次深度克隆状态很重要。
// store.js
import { createPinia } from 'pinia'
import cloneDeep from 'lodash.clonedeep'
const store = createPinia()
1️⃣
store.use(({ store }) => {
2️⃣
const initialState = cloneDeep(store.$state)
3️⃣
store.$reset = () => store.$patch(cloneDeep(initialState))
})
请随意阅读基于此答案的文章:How to reset stores created with function/setup syntax
关于vue.js - Pinia:使用设置语法时的 $reset 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71690883/
我在新的 Nuxt3 应用程序之上设置了 Pinia 并启动了开发服务器,并按顺序使用这些命令: npx nuxi init nuxt-app cd nuxt-app npm install npm
我正在从 vue 4.x 迁移到 pinia,我的一个文件需要来自商店的 api key 。但是即使我遵循 Pinia documentation 也无法让它工作.这是我如何使用 pinia //存储
我想弄清楚使用 Pinia 存储而不是仅使用纯 ts 可组合函数的优势是什么 const userName = ref('') export default function useUser() {
我在 main.js 中进行 session API 调用,并将响应中的值用作我的根存储的初始值。在 vuex 中,它是这样处理的, DataService.getSession() .then(
我正在使用 OptionsAPI 和 Pinia Store 构建一个 Vue 3 应用程序,但我经常遇到一个问题,指出我试图在 createPinia() 之前访问该商店叫做。 我一直在关注文档以在
Vue3 发布已经有一段时间了,它采用了新的响应式系统,而且构建了一套全新的 Composition API。Vue 的周边生态都在加紧适配这套新的系统,官方的状态管理库 Vuex 也在适配中,
我目前在一个 Vue 3 项目中工作。 使用 this.$router.push({}) 似乎在 Pinia 商店中不起作用。 我也尝试过导入 useRouter --> import { useRo
我目前在一个 Vue 3 项目中工作。 使用 this.$router.push({}) 似乎在 Pinia 商店中不起作用。 我也尝试过导入 useRouter --> import { useRo
项目代码以上传至码云,项目地址:https://gitee.com/breezefaith/vue-ts-scaffold 。 目录 前言 脚手架
我正在为 Quasar + Pinia 使用 Vue 3 + Vite 插件进行商店管理。我遵循了所有官方文档(Quasar、Pinia)。但是我收到了这个错误。 [Vue warn]: in
我试图了解可组合的目的。我有一个像这样的简单组合,并试图从 Pania 商店查看状态,其中 watch不触发: import { ref, watch, computed } from "vue";
我正在使用 pinia 和 vue-router 4.x ,但我在商店中使用它们时遇到问题。 每个人都独立工作,但不能一起工作。 如果我使用 import router from '../router
我目前正在开发我的第一个 vue 应用程序,目前正在构建登录逻辑。 对于国家管理,正在使用 pinia。我创建了一个 Pinia Store 来管理全局的“isLoggedIn”状态。 import
我有一个 pinia 商店,使用如下设置语法创建: defineStore('id', () => { const counter = ref(0) return { counter }
我有一个 pinia 商店,使用如下设置语法创建: defineStore('id', () => { const counter = ref(0) return { counter }
使用 Vite 快速搭建脚手架 命令行选项直接指定项目名称和想要使用的模板,Vite + Vue 项目,运行(推荐使用yarn) # npm 6.x npm init vite@latest my
我正在尝试使用包 pinia-plugin-persistedstate 在新的 Nuxt 3 应用程序中保留变量的状态。 我已经实现了 guide 中提供的步骤对于 nuxt 3: 创建了 /plu
我正在开发一个使用 vue 和 firebase 的网站。在身份验证部分之后,用户进入仪表板,其中有他的项目列表,这些项目是 firestore 中用户文档的子集合。 我创建了一个管理这些数据的 pi
我无法让访问同一商店的多个组件响应更新,直到我弄乱 dom 元素来触发新的渲染。 在我的 Pinia 商店中,我有一个数组和一个更新方法: let MyArray: IMyItem[] = [
我有一个 react 值,我想将其存储在 pinia 存储中。 const data = ref({}); async function loadData() { fetch("...")
我是一名优秀的程序员,十分优秀!