Nuxtjs组件中的asyncData不起作用

Tha*_*gLe 2 vuejs2 nuxt.js

我有一个nuxt.js项目的问题.我使用异步组件,但当它rending时,async无法正常工作.这是我的代码.

我在https://nuxtjs.org/api/查看了文档,但我不知道究竟是什么问题

Test.vue(组件)

    <template>
        <div>
            {{ project }}
        </div>
    </template>

    <script>

    export default {
        data() {
            return {
                project : 'aaaa'
            }
        },
        asyncData() {
            return {
                project : 'bbbb'
            }
        }
    }

    </script>
Run Code Online (Sandbox Code Playgroud)

这是index.vue(页面)

    <template>
        <test></test>
    </template>
    <script>

    import Test from '~/components/Test.vue'
    export default {
        components : {
            Test
        }
    }

    </script>
Run Code Online (Sandbox Code Playgroud)

我的预期结果是

    bbbb

但是当在http:// localhost:3000上运行时,这是实际结果

    aaaa

我尝试多次搜索谷歌,但没有预期的解决方案.请帮助我的人.

谢谢你的帮助.

Nic*_*nec 9

components/文件夹必须仅包含"纯"Vue.js组件

所以你不能asyncData在里面使用.

阅读此常见问题解答:https://nuxtjs.org/faq/async-data-components#async-data-in-components-


components/Test.vue(组件)

<template>
    <div>
        {{ project }}
    </div>
</template>

<script>
export default {
    props: ['project'] // to receive data from page/index.vue
}
</script>
Run Code Online (Sandbox Code Playgroud)

pages/index.vue(页)

<template>
    <test :project="project"></test>
</template>

<script>
import Test from '~/components/Test.vue'
export default {
    components : {
        Test
    },
    asyncData() {
        return {
            project : 'bbbb'
        }
    }
}
</script>
Run Code Online (Sandbox Code Playgroud)

  • 哦......你对重复的钥匙是对的,我的坏.我将从我的答案中删除这部分;-) (2认同)

小智 8

您不能在组件中使用 asyncData。

您可以选择使用fetch方法。

<template>
  <div>
    <p v-if="$fetchState.pending">Loading....</p>
    <p v-else-if="$fetchState.error">Error while fetching mountains</p>
    <ul v-else>
      <li v-for="(mountain, index) in mountains" :key="index">
        {{ mountain.title }}
      </li>
    </ul>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        mountains: []
      }
    },
    async fetch() {
      this.mountains = await fetch(
        'https://api.nuxtjs.dev/mountains'
      ).then(res => res.json())
    }
  }
</script>
Run Code Online (Sandbox Code Playgroud)