问题标签 [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.

0 投票
1 回答
20 浏览

typescript - 对象的打字稿覆盖函数

所以我对松果有这个小功能。在我确实输入我的对象的 ID 来过滤它的地方(结果是 type Task | undefined)我给出了一个 Key ,它当然应该是一个keyof Task,现在我有点挣扎value。我试图找出最适合我的用例的东西,它必须是值左右,但我目前没有找到正确的实用程序类型(如果它甚至应该是一个)。

另外,我在这里还有第二个问题,task[key]说它的类型never有人能解释为什么它永远不会是类型吗?

0 投票
0 回答
18 浏览

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 中另一个商店的子对象派生一个商店,然后我可以在顶层绑定那个新商店?

0 投票
2 回答
142 浏览

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?

我的商店文件:

0 投票
3 回答
67 浏览

typescript - ts、useStorage (vueuse) 和 Pinia 类型的问题

我在以下代码中遇到了一个奇怪的错误: Property 'length' does not exist on type '{ [RefSymbol]: true; }'.

但是当我检查foogetCount 函数中的类型时,我的 IDE 告诉我它的类型Foo[]。我究竟做错了什么?

0 投票
1 回答
28 浏览

typescript - 为什么打字稿值变成“任何”类型

所以似乎出于某种原因,不确定是谁的错 - 打字稿类型没有被识别......

例如,我使用“pinia@next”npm 包,这是一个简单的演示代码:

(这是文件夹中唯一的文件以及安装的单个包npm install pinia@next

在这段代码中:

  1. “useAccountStore”的类型正确 在此处输入图像描述
  2. “StoreDefinition”类型是一个返回“Store”作为返回类型的函数: 在此处输入图像描述
  3. VS Code 认为它返回一个“任何”类型:

在此处输入图像描述

  1. 甚至,当我明确地将其转换为“Store”类型时,它会导致“any” 在此处输入图像描述
  • VS 代码版本:1.64.1
  • VS Code 打字稿版本:4.5.5

任何想法可能会发生什么?

  • 这似乎不是包本身的问题,因为我在互联网上以及 YouTube 上的教程上都没有发现任何类似的问题一定是我的 Typescript 配置/版本有问题吗?
  • 我确实将我的 Visual Studio Code 升级到了最新版本
  • 在 Visual Studio Code 开发工具中 - 我看不到与打字稿相关的警告或错误
0 投票
2 回答
29 浏览

typescript - 明确键入商店中的属性?

在 Pinia 商店中,如何显式键入属性?

0 投票
1 回答
62 浏览

javascript - 我无法从 Pinia Vuejs3 商店访问我的路线

我无法从商店访问我的路线。这可能有一个很好的解释。我使用 Vuejs3 和 Pinia

我的商店:

当我在 setSelectedNavigationPage 方法中执行控制台日志时

我有一个未定义的

0 投票
0 回答
14 浏览

javascript - 使用 vue-router 在导航期间更新 Vue 状态

我正在构建一个使用 Vue Router 和 Pinia 进行状态管理的 Vue 3 应用程序。

在我的全局状态下,我定义了一个属性,它告诉我用户是否已登录,以便用户可以在应用程序中导航。但是,登录过程由 Cognito 处理,所以一旦我进入应用程序,我点击登录按钮,它会将我带到一个处理登录过程的 Cognito 屏幕,然后将我重定向回我的应用程序的主页。

因此,在重定向之后,我从生成的 URL 中提取了一些参数,并且我想将它们保存在全局状态中,为此我使用beforeEach防护来解析 URL,检查参数,更新存储,然后从中读取以检查有效的会话。

但我的问题是导航甚至在状态更新之前仍在继续。我最终使用setTimeout只是为了看看等待是否解决了这个问题,它确实

我应该如何处理这种情况?我读过关于beforeResolve守卫的文章,但我不确定如何使用它;基本上我只需要知道在导航期间我应该如何执行一些异步操作(比如从服务器获取数据),而不是在组件内部。

0 投票
0 回答
20 浏览

vue-router - 如何在 pinia 商店内使用路由器

我在使用 pinia action 中的路由器时遇到问题。我使用异步 API 调用来调用该操作,并且我希望在成功后重定向到另一个页面。但是在存储中初始化路由器并调用 router.push 在操作中不起作用。有人对pinia有这个问题吗?

0 投票
0 回答
46 浏览

vue.js - pinia:在函数符号中定义 getter 和 action

我正在以函数表示法实现 pinia 商店,并且想知道如何声明 getter 和操作。

这些是作为简单功能实现的,没有区别吗?