Vue中父对自组件异步传值未收到或者错误问题

正常情况的父子传值

组件中通常需要调用父组件的数据,此时需要使用 vue3 的 props 进行父子组件通信传值。

如下:子组件接收父组件的MenuData数据来显示内容。

//父组件
<template>
  <HelloWorld :menuData="MenuData" /> //子组件
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'
import { ref } from 'vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  },
  data() {
    return {
      MenuData: ref([])
    }
  },
  methods: {
    /**
     * @return {Promise<Array>} 
     */
    async GetLevalMenu() {
      ...
    }
  },
 mounted() {
        
        // 获取异步数据
		this.GetLevalMenu().then(result=>{
			this.MenuData.value=result;
		});
		
  }
}
</script>

子组件接收数据并渲染。

// 自组件
export default {
  name: 'HelloWorld',
  props:{
	menuData:Array
  },
  data() {

    return{
        ...
    }
}
....

但是在子组件mounted中打印得到的是空内容,即父组件MenuData初始化数据——空[   ]。

解决办法

我认为异步获取的值都不要使用prop的方式获取其值,可以使用ref 获取组件的实例方法来获取值。

1.在组件上定义ref 用于获取Dom

<HelloWorld :menuData="MenuData" />
//更改为
<HelloWorld ref="Menu" />

2. 在mounted中获取数据后立刻引用组件实例方法对其赋值

mounted() {

		this.GetLevalMenu().then(result=>{
			this.MenuData.value=result;
		});
  }

//更改为

mounted() {

		this.GetLevalMenu().then(result=>{
            this.$refs.getMenuData(result);
		});
		
  }

3.在子组件中实现获取(getMenuData)方法

props:{
	menuData:Array
  },

//更改为下面

data{
  return{
    menuData:Array

    };

},
//子组件
methods:{
//... 其他方法

getMenuData(Menudata)

    this.menuData=Menudata;
//然后就可以靠这个响应式数据渲染组件啦!
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值