【发布时间】:2022-01-06 13:55:16
【问题描述】:
我是 Vue 的新手。
我看到有人建议我们需要为组件使用 Vuex 模块来存储它们的状态数据,以便我们可以在父组件中访问该数据。
例如,我有 MarkdownEditor.vue 组件,我需要从父组件访问它的数据。我将状态存储在 Vuex 模块中,例如 markdownEditorStore.js... 我可以在父组件中轻松访问此状态,例如 this.$store.state.markdownEditor.XYZ。
没关系。但是,如果我有 n 个 MarkdownEditor 组件并且每个组件都需要隔离状态怎么办?这是一个非常基本的问题,但是我该如何处理呢?
我需要基于模块实例的解决方案,而不是基于模块的解决方案。
【问题讨论】:
-
您需要以某种方式识别实例。状态数组或某种形式的 uid 中的索引。这可能是 XY 问题,人们可以提出任何建议,但这并不意味着它适合您的情况。如果有直接的父子关系并且数据没有在其他任何地方使用,那么像往常一样使用 Vue 事件会更直接
-
@EstusFlask 假设我在其 created() 方法中为子组件的每个实例创建了一个 UUID。如何在父组件中访问该子组件的 UUID 以从 vuex 状态获取子组件的数据?获取实例的 UUID 的唯一方法是在父组件中启动该组件时创建并传递 UUID?这对我来说看起来很脏。 UUID 生成可能在孩子的代码 imo 中,但不知道如何。那么在那种情况下我怎么能得到那个 UUID 呢?问题...但不知道答案。
-
这将违背初衷。如果您能够将 id 从孩子传递给父母,那么您也可以传递其余数据。由于您已经绑定到商店,您可以让它保存 id 的逻辑,即具有 getEditorId
getter函数。让它action不好,afaik 动作可以返回随机数据,但它总是用承诺包装,我不确定它是否允许。 -
即在您的情况下,它将是
this.childEditorId = store.getters.getEditorId(); store.dispatch('createEditor', this.childEditorId)或this.childEditorId = await store.dispatch('createEditor'),第一种方法不那么简单但更传统
标签: javascript vue.js vuex