【问题标题】:asyncData and fetch is not setting dataasyncData 和 fetch 没有设置数据
【发布时间】:2020-12-07 22:02:29
【问题描述】:

我正在使用带有 typescript 和 nuxt-property-decorator 包的 nuxt v2.14.1。 我面临很多问题。

  1. 我无法从 fetch() 或 asyncData 设置数据。

    console.log(this.fruits) // => undefined
    console.log(response.data);//  => [{},..}
    this.fruits = response.data; // => this does not set fruits
    

Vue 开发工具也将水果显示为空数组。

谁能帮我了解发生了什么以及如何解决它?

这里是使用 fetch 的代码:

@Component({
  layout: 'AppLayout',
  async fetch({ query, store }: Context) {
    const self = this;
    const model = new Car();
    model.setFilters(query);
    const response = await model.$api.$get('/new/cars').catch(() => {
      store.$showError('Unable to fetch cars');
    });
    if (response) {
      // @ts-ignore
      self.cars = Car.collect(response.data as Partial<Car>[]);
    }
  },
})
export default class index extends Vue {
  cars: Car[] = [];
}

如果我只是将 fetch 重命名为 mounted,上面的代码就可以工作。

另外,当使用 asyncData 时,代码似乎可以工作,并且我看到了我的汽车列表,然后,当页面加载完成时,即使我可以看到 Vue 开发工具中列出的汽车,页面也会自动变为空。

更新:在 fetch 参数中不使用 nuxt 上下文似乎有效。 不知道为什么。

【问题讨论】:

  • 您发布的内容还不够多,但您的问题几乎可以肯定是您试图在数据实际设置之前访问数据。不要忘记记录到控制台的对象是对象的实时视图,而不是对象被记录时的快照。它会让你对什么时候发生的事情产生错误的印象。
  • 在 asyncData 中您将无法访问this,但是您可以在 fetch 中访问它。您能否在错误中添加更多代码/详细信息!!!
  • @HardikShah 感谢您的宝贵时间。更新了代码。

标签: typescript vue.js nuxt.js


【解决方案1】:

你试过只返回一个对象吗?

  async fetch({ query, store }: Context) {
    const model = new Car();
    model.setFilters(query);
    const response = await model.$api.$get('/new/cars').catch(() => {
      store.$showError('Unable to fetch cars');
    });
    if (response) {
      return {
         cars: Car.collect(response.data as Partial<Car>[])
      }
    }
  },

只需返回它,它应该将您的返回对象与您的数据对象合并。

他们也在文档中写道:https://nuxtjs.org/api/

asyncData 的结果将与数据合并。

请注意:由于asyncData() 发生在服务器端,它无法使用this 访问vue 实例

警告:您无权通过this 访问组件实例 在 asyncData 内部,因为它在启动组件之前被调用。

【讨论】:

  • 这在 fetch 中有效吗?我会尽力让你知道。
  • 不,从 fetch 返回的对象对我不起作用。
  • @priosshrsth 和异步数据?
  • 从 asyncData 返回对象确实设置了汽车,我可以在 vue 开发工具中看到它,但是没有渲染模板。实际上,它出现了一秒钟,我可以看到带有图像的汽车列表,然后它就消失了,页面变空了。
猜你喜欢
  • 2021-11-09
  • 2021-07-03
  • 2021-12-28
  • 2020-04-03
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
相关资源
最近更新 更多