【问题标题】:Nuxt fetch() called repeatedly, multiple timesNuxt fetch() 多次调用
【发布时间】:2020-10-24 13:13:46
【问题描述】:

我正在创建一个从 Array.Buffer 异步接收图像的基本组件。

Nuxt documentation 之后,我认为fetch() 是正确的调用,但当它实施时,它会被调用+20 次。

为什么会这样?我想利用async/await,但看起来现在 created() 承诺必须这样做?

<template>
  <div class="image-container">
        <!-- <img :class="imgClasses" :src="`data:image/png;base64, ${image}`" alt="Preview Image" /> -->
  </div>
</template>


<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator'

@Component
export default class BasePreviewImage extends Vue {
  @Prop({ type: String }) id: string
  @Prop({ type: String, default: 'small' }) size: string

  image: string = ''

  get imgClasses() {
    return {
      [`preview-image-${this.size}`]: true
    }
  }

  async fetch() {
    console.log('fetching')
  }

  mounted() {
    console.log('mounted')
  }

  created() {
    console.log('Created BasePreviewImage')
  }
}

【问题讨论】:

    标签: vue.js nuxt.js


    【解决方案1】:

    fetch 在渲染路由时在服务器端调用,在导航时在客户端调用。所以有机会多次调用/撤销fetch()。并且可能您也在多个地方使用过这个组件。但重要的事情 fetch() 在 Nuxt >= 2.12 时已弃用

    但您可以通过这种方式控制fetchOnServer: false,然后它只会在客户端调用。

    <script>
    export default {
      data () {
        return {
          posts: []
        }
      },
      async fetch () {
        this.posts = await this.$http.$get('https://jsonplaceholder.typicode.com/posts')
      },
      fetchOnServer: false
    }
    </script>
    

    【讨论】:

    • 欣赏输入。当我回到我的电脑前,我会尝试这个设置,但我不确定是不是这样。该元素仅在页面上出现一次,因此被调用 23 次是……很奇怪。无论如何,看起来它已被弃用,无论如何我都必须找到不同的方法。
    • 经过测试,看起来问题与fetchOnServer 设置无关。更新问题并重新发布here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2021-12-07
    • 2021-01-12
    相关资源
    最近更新 更多