vue3接口数据赋值对象,渲染报错问题及解决

 更新时间:2022年09月08日 08:37:05   投稿:jingxian  
这篇文章主要介绍了vue3接口数据赋值对象,渲染报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue3接口数据赋值对象,渲染报错

const app = require('express')()
// 跨域设置
app.all("*", function (req, res, next) {
    res.setHeader("Access-Control-Allow-Credentials", true);
    res.setHeader("Access-Control-Allow-Origin", '*'); // 添加这一行代码,代理配置不成功
    res.setHeader("Access-Control-Allow-Methods", '*');
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, If-Modified-Since")
    next();
})
app.get('/', function (req, res) {
    res.send({
        dict: 'sfasf',
        detailAddress:'1111111'
  })
})
app.listen(9999, () => {
    console.log('http://localhost:9999')
})

用express启动了一个简单的node服务器写了一个测试接口

vue/cli创建的vue3项目,页面中通过接口获取的数据,注意第二个属性dict

现在我们用对象赋值的方法将res.data赋值给vue3的reactive里绑定的属性form

<template>
<div>{{data.form.dict}}</div>
<div>{{data.form.detailAddress}}</div>
</template>
 
<script setup>
import {reactive} from 'vue';
import axios from 'axios'
const data = reactive({
    form:null,
})
axios.get('http://localhost:9999').then(res => {
    console.log(res,'res');
    if (res.status === 200) {
        data.form = res.data
        console.log(data.form);
    }
})
</script>
 
<style lang="scss" scoped>
</style>

查看打印结果

报错了,但是页面能渲染 

如果我们把动态数据绑定的form初始化的值不用null,换成{}

<template>
<div>{{data.form.dict}}</div>
<div>{{data.form.detailAddress}}</div>
</template>
 
<script setup>
import {reactive} from 'vue';
import axios from 'axios'
const data = reactive({
    form:{},
})
axios.get('http://localhost:9999').then(res => {
    console.log(res,'res');
    if (res.status === 200) {
        data.form = res.data
        console.log(data.form);
    }
})
</script>
 
<style lang="scss" scoped>
</style>

打印结果

 没有报错,且能渲染  

总结:通过楼主查阅各种文档的细心研磨,发现vue3的动态数据绑定,在进行proxy代理的时候,get方法中的return返回时,使用了reflect反射来绑定this的指向

get:function(target,key){
    return Reflect.get(target,key)
}

我认为,如果初始值为null,会导致this指向null,引发这个报错问题,目前楼主认为是这个原因导致的。

vue在渲染数据的时候的一些报错问题

问题描述

vue在请求获取数据的时候,这个过程是异步的,但是刚进页面的时候,数据还未被获取到,是为空的,如果再次点击拿下一层数据时没办法拿到数据的,会报错

解决方法

i  在data中不使用null而是使用{}

ii可以在data中使用null,但是在渲染数据的外面的包一个div,使用v-if=" homeData"

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
 
<body>
    <div id="app">  
        <!-- <div v-if="homeData"> -->
            <div class="bangItem" v-for="bangItem in homeData.rank_list">
            <!-- </div> -->
        </div>
        
    </div>
 
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                // homeData:null//刚进来的时候是null,上面使用rank_list还未获取数据,会报错,解决方法这里不使用Null,用{},方法二这里可以使用null,然后在渲染数据外面包一个div,使用v-if homeDate
                homeData: {}
            },
            created() {
                this.getHome()
            },
            methods: {
                getHome() {
                    fetch('http://m.kuwo.cn/newh5app/api/mobile/v1/home').then(res => res.json()).then(res => {
                        console.log(res);
                        this.homeData = res.data;
                    })
                }
            }
        })
 
    </script>
</body>
 
</html>

在vue中请求数据的时候,同一个数据有的是数据是不存在的,有的是存在的,如果直接写会报错,这时候可以在没有的那个数据名后面加?l来作为判断,之后再往下点一层

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue.js数据绑定之data属性

    Vue.js数据绑定之data属性

    这篇文章主要为大家详细介绍了Vue.js数据绑定之data属性,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Vue3中如何修改父组件传递到子组件中的值(全网少有!)

    Vue3中如何修改父组件传递到子组件中的值(全网少有!)

    大家都知道,vue是具有单向数据流的传递特性,下面这篇文章主要给大家介绍了关于Vue3中如何修改父组件传递到子组件中值的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • vue3 el-form-item如何自定义label标签内容

    vue3 el-form-item如何自定义label标签内容

    这篇文章主要介绍了vue3 el-form-item如何自定义label标签内容问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue-element-admin如何设置默认语言

    vue-element-admin如何设置默认语言

    这篇文章主要介绍了vue-element-admin如何设置默认语言,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • Vue draggable实现从左到右拖拽功能

    Vue draggable实现从左到右拖拽功能

    这篇文章主要为大家详细介绍了Vue draggable实现从左到右拖拽功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vuex之this.$store.dispatch()与this.$store.commit()的区别及说明

    vuex之this.$store.dispatch()与this.$store.commit()的区别及说明

    这篇文章主要介绍了vuex之this.$store.dispatch()与this.$store.commit()的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Vuex子模块调用子模块的actions或mutations实现方式

    Vuex子模块调用子模块的actions或mutations实现方式

    这篇文章主要介绍了Vuex子模块调用子模块的actions或mutations实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 在vue中封装的弹窗组件使用队列模式实现方法

    在vue中封装的弹窗组件使用队列模式实现方法

    这篇文章主要介绍了在vue中封装的弹窗组件使用队列模式实现方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Vue中实现滚动加载与无限滚动

    Vue中实现滚动加载与无限滚动

    本文主要介绍了Vue中实现滚动加载与无限滚动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 如何在vue3+ts项目中使用query和params传参

    如何在vue3+ts项目中使用query和params传参

    Vue3中的路由传参有两种方式:query和params,下面这篇文章主要给大家介绍了关于如何在vue3+ts项目中使用query和params传参的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04

最新评论