【问题标题】:Vuex: Why do nested objects stay undefined, even when initialized in the state?Vuex:为什么嵌套对象保持未定义,即使在状态下初始化?
【发布时间】:2020-10-23 21:28:20
【问题描述】:

我用一个对象定义我的状态,用一些嵌套对象初始化为一个空字符串和一个空数组,如下所示:

state: {
  displayedFarmer: {
    name: "",
    arrivalDates: []
    // some more fields...
  },
  // more vuex stuff
}

我希望如果我console.log 显示的农夫,arrivalDates 会出现。这是我在组件中跟踪它所做的:

  computed: {
    ...mapState([ 'displayedFarmer' ]),
    // more code
  },
  watch: {
    displayedFarmer: {
      handler() {
        console.log("displayedFarmer", this.displayedFarmer);
      },
      deep: true,
      immediate: true
    }
  }

出现的第一条日志行显示displayedFarmer 对象,缺少arrivalDates 和名称:

displayedFarmer 
Object { … }

(在控制台中展开时基本上只出现prototype__ob__ 对象)

我并不清楚这种行为,并迫使我在第一次访问字段时使用一种小型且无害的 hack 来初始化字段。

对于这个问题,我想知道的是:

  1. 为什么当我通过组件访问时看不到我在状态中初始化的对象?
  2. 如何以不同的方式执行此操作,以便在我第一次访问对象时初始化所有嵌套项?

【问题讨论】:

  • 除非您完全修改了displayedFarmer,否则您记录的内容应该与您在初始状态中定义的具有这些属性的对象相同。其他事情正在发生。你能提供一个可重现的例子吗?
  • 你提到的道具在这个demo中看起来很好
  • @tony19 - 在查看了您的演示后,我进一步研究了我的代码,发现在父组件中我正在调度一个操作来清除 displayedFarmer 对象。哦,愚蠢的我!

标签: javascript vue.js vuex


【解决方案1】:
  1. watchimmediate: true 在组件 hook:created 之前触发。这可能是您无权访问已初始化对象的原因。
  2. 我不知道你想达到什么目的,你能扩展你的问题吗?
  3. 我想到的第一件事是尝试在hook:mouted 上调用method(它可以为所欲为)。然后在 watcher 中调用相同的方法,但使用 immediate: false(这是默认的 btw)

【讨论】:

  • 对于这个问题的范围,我唯一想要实现的就是理解为什么我看不到包含所有嵌套对象的对象。但是既然你问了,这是另一个问题(stackoverflow.com/questions/64491939/…)的延续,我正在尝试将 vuetify 日期选择器与 vuex 一起使用。主要问题是,如果我给它一个不是数组的 v-model(或绑定一个值),日期选择器将不会安装。我问题中的手表只是一个调试工具,而不是我想要实现的目标
猜你喜欢
  • 2013-08-24
  • 2019-08-25
  • 2019-05-08
  • 2020-06-21
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2018-08-22
相关资源
最近更新 更多