问题标签 [pinia]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
typescript - 对象的打字稿覆盖函数
所以我对松果有这个小功能。在我确实输入我的对象的 ID 来过滤它的地方(结果是 type Task | undefined
)我给出了一个 Key ,它当然应该是一个keyof Task
,现在我有点挣扎value
。我试图找出最适合我的用例的东西,它必须是值左右,但我目前没有找到正确的实用程序类型(如果它甚至应该是一个)。
另外,我在这里还有第二个问题,task[key]
说它的类型never
有人能解释为什么它永远不会是类型吗?
vue.js - 将 mapWritableState() 与 v-model 一起用于嵌套属性
在使用 pinia 的实验性待办事项列表应用程序中,我有一个商店状态,focusTaskId
其中taskById
包含任何本地缓存的项目,由它们的 id 存储。
鉴于 v-model 未存储在存储的顶级键中,如何对缓存的任务之一使用 v-model?
当一个项目成为焦点时,我想使用 v-model 将表单绑定到存储在 store 中 taskById 下的相应任务。为此,它必须是表单组件中的本地别名可写属性。
不幸的是,为可写存储属性设置别名,mapWritableState
只接受来自存储的顶级键,例如["focusTaskId"]
or ["taskById"]
,并且不能接受通用路径表达式,例如 [ taskById['${id}']
]
是否有一种解决方法,以便我可以通过 v-model 将我的表单动态绑定到taskById
当前关注的任何对象,即使它“向下两层”?
我来自 React 和我的 lauf 存储,我可以为 taskById 对象分区存储,并使用“id”作为(新)顶级键从那里绑定。也许有一个等效的方法可以从 pinia 中另一个商店的子对象派生一个商店,然后我可以在顶层绑定那个新商店?
javascript - 如何正确安装 Pinia Store?
我正在使用 OptionsAPI 和 Pinia Store 构建一个 Vue 3 应用程序,但我经常遇到一个问题,指出我正在尝试在createPinia()
调用之前访问该商店。
我一直在关注文档以在组件外部使用 Pinia 商店,但也许我没有以正确的方式做某事。
情况如下:
我有一个登录/login
屏幕(我进行 API 调用。/
Dashboard
在Home
组件上,我使用调用 store的组件useMainStore()
,然后使用从 Cognito 重定向后出现在 URL 上的信息更新状态,然后我想在内部的 API 调用中使用一些状态信息Dashboard
。
这是我的Home
组件,它本身可以正常工作,因为我想在创建 Pinia 实例后总是调用const store = useMainStore();
内部的钩子。mounted()
现在这是我的Dashboard
组件:
上面的组件将失败,并抛出一个错误,说明我正在尝试在创建实例之前访问存储,我可以mounted()
像以前一样通过将存储声明移动到钩子内来解决这个问题,但是如果我想使用以其他方式存储在组件内部,而不仅仅是在mounted
钩子中?还有,为什么会失败?至此,既然Home
组件已经可以访问商店,那么在Dashboard
内部子路由内的组件是否应该Home
已经创建了商店实例?
这是我main.js
调用该createPinia()
方法的文件。
我得到的错误是:
Uncaught Error: []: getActivePinia was called with no active Pinia. Did you forget to install pinia?
我的商店文件:
typescript - ts、useStorage (vueuse) 和 Pinia 类型的问题
我在以下代码中遇到了一个奇怪的错误: Property 'length' does not exist on type '{ [RefSymbol]: true; }'.
但是当我检查foo
getCount 函数中的类型时,我的 IDE 告诉我它的类型Foo[]
。我究竟做错了什么?
typescript - 为什么打字稿值变成“任何”类型
所以似乎出于某种原因,不确定是谁的错 - 打字稿类型没有被识别......
例如,我使用“pinia@next”npm 包,这是一个简单的演示代码:
(这是文件夹中唯一的文件以及安装的单个包npm install pinia@next
)
在这段代码中:
- VS 代码版本:1.64.1
- VS Code 打字稿版本:4.5.5
任何想法可能会发生什么?
- 这似乎不是包本身的问题,因为我在互联网上以及 YouTube 上的教程上都没有发现任何类似的问题一定是我的 Typescript 配置/版本有问题吗?
- 我确实将我的 Visual Studio Code 升级到了最新版本
- 在 Visual Studio Code 开发工具中 - 我看不到与打字稿相关的警告或错误
typescript - 明确键入商店中的属性?
在 Pinia 商店中,如何显式键入属性?
javascript - 我无法从 Pinia Vuejs3 商店访问我的路线
我无法从商店访问我的路线。这可能有一个很好的解释。我使用 Vuejs3 和 Pinia
我的商店:
当我在 setSelectedNavigationPage 方法中执行控制台日志时
我有一个未定义的
javascript - 使用 vue-router 在导航期间更新 Vue 状态
我正在构建一个使用 Vue Router 和 Pinia 进行状态管理的 Vue 3 应用程序。
在我的全局状态下,我定义了一个属性,它告诉我用户是否已登录,以便用户可以在应用程序中导航。但是,登录过程由 Cognito 处理,所以一旦我进入应用程序,我点击登录按钮,它会将我带到一个处理登录过程的 Cognito 屏幕,然后将我重定向回我的应用程序的主页。
因此,在重定向之后,我从生成的 URL 中提取了一些参数,并且我想将它们保存在全局状态中,为此我使用beforeEach
防护来解析 URL,检查参数,更新存储,然后从中读取以检查有效的会话。
但我的问题是导航甚至在状态更新之前仍在继续。我最终使用setTimeout
只是为了看看等待是否解决了这个问题,它确实
我应该如何处理这种情况?我读过关于beforeResolve
守卫的文章,但我不确定如何使用它;基本上我只需要知道在导航期间我应该如何执行一些异步操作(比如从服务器获取数据),而不是在组件内部。
vue-router - 如何在 pinia 商店内使用路由器
我在使用 pinia action 中的路由器时遇到问题。我使用异步 API 调用来调用该操作,并且我希望在成功后重定向到另一个页面。但是在存储中初始化路由器并调用 router.push 在操作中不起作用。有人对pinia有这个问题吗?
vue.js - pinia:在函数符号中定义 getter 和 action
我正在以函数表示法实现 pinia 商店,并且想知道如何声明 getter 和操作。
这些是作为简单功能实现的,没有区别吗?