无法从 v-for 获取数据且数据为空

Posted

技术标签:

【中文标题】无法从 v-for 获取数据且数据为空【英文标题】:Cannot get data from v-for and the data is null 【发布时间】:2021-04-03 23:24:37 【问题描述】:

我一直坚持使用 Vue.js 通过 Axios 从数据库中获取数据。在 Vue.js 开发者工具中,我可以像这样从我的数据库中获取数据:

但是当我像这样使用v-for 循环时:

<template>
    <div class="flex flex-col items-center py-4">
        <NewPost></NewPost>
        <Post v-for="(post,i) in posts.data" :post="post" :key="i"/>
    </div>
</template>

<script>
import NewPost from "../components/NewPost";
import Post from "../components/Post";
export default 
    name: "Newsfeed",
    components: 
        NewPost,
        Post
    ,

    data: () => 
        return 
            posts: null
        
    ,

    mounted() 
        axios.get('/api/posts').then(res => 
            this.posts = res.data
            console.log(this.posts)
        ).catch(error => 
            console.log('Unable to fetch posts')
        )
    

</script>

<style scoped>

</style>

控制台说

"[Vue 警告]:渲染错误:"TypeError: 无法读取属性 'data' 为空”

发现于

---> 在资源/js/views/Newsfeed.vue 在资源/js/components/App.vue "

我不明白,因为在 Vue.js 开发人员工具中我可以获取数据。循环错了吗?谢谢!

【问题讨论】:

【参考方案1】:

使用空数组初始化嵌套字段,例如:

    data: () => 
        return 
            posts: 
                   data:[]
                 
        
    ,

【讨论】:

谢谢!我也通过更改 this.posts = res.data.data 来解决,循环是 v-for="post in posts"【参考方案2】:

另一个答案是像这样添加加载变量

在数据中: 数据:()=> 返回 帖子:空, 加载:真

在mounted()中

mounted() 
        axios.get('/api/posts').then(res => 
            this.posts = res.data
            this.loading = false
            console.log(this.posts)
        ).catch(error => 
            this.loading = false
            console.log('Unable to fetch posts')
        )
    

【讨论】:

以上是关于无法从 v-for 获取数据且数据为空的主要内容,如果未能解决你的问题,请参考以下文章

HashMap 为空,因此我无法从 Firebase 数据库获取模拟器中显示的数据

我无法在 vuejs 中使用 v-for 从 API 中显示数据

HSQLDB 结果集 - 如何获取没有引号的 HSQLDB 返回空间作为空格且不为空?

vue中v-for 怎么获取长度

当我进行左连接时,我仍然无法从左表中获取数据?

VueJS 和嵌套的 v-for:如何通过每个循环获取端点数据?