父组件的值还没有计算完成,导致子组件无法正常显示传递过来的值
一、问题场景
二、常见原因
三、解决方案
1. 使用 v-if 指令
<template>
<child-component v-if="dataReady" :data="parentData"></child-component>
</template>
<script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
const dataReady = ref(false);
const parentData = ref(null);
// 模拟异步操作或者复杂计算
setTimeout(() => {
// 数据准备好后更新 dataReady 和 parentData
dataReady.value = true;
parentData.value = '计算完成的数据';
}, 2000);
</script>
2. 使用计算属性
<template>
<div v-if="displayData">{{ displayData }}</div>
</template>
<script setup>
import { computed } from 'vue';
const props = defineProps(['data']);
const displayData = computed(() => {
if (props.data) {
return props.data;
}
return null;
});
</script>
3. 事件驱动
<template>
<child-component :data="parentData" @update="updateData"></child-component>
</template>
<script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
const parentData = ref(null);
// 模拟异步操作或者复杂计算
setTimeout(() => {
parentData.value = '计算完成的数据';
// 触发更新事件
emit('update');
}, 2000);
</script>
<template>
<div>{{ data }}</div>
</template>
<script setup>
import { defineProps, defineEmits } from 'vue';
const props = defineProps(['data']);
const emit = defineEmits(['update']);
// 可以在 update 事件中执行数据更新相关操作
</script>