vue3+ts 子组件接收父组件异步传值 不实时更新
在Vue 3和TypeScript中,子组件可能不能实时更新从父组件异步传递的值。这通常是因为父组件异步更新数据后,子组件没有正确地跟踪这些变化。
为了确保子组件能够实时更新父组件传递的异步数据,可以使用Vue的响应式原理。以下是一些可能的解决方案:
- 使用
watch
监听属性的变化。 - 使用
v-bind
进行响应式绑定。 - 使用
props
的default
函数返回一个响应式对象。
以下是一个使用watch
的例子:
// 父组件
<template>
<ChildComponent :asyncData="asyncData" />
</template>
<script setup lang="ts">
import { ref, watch } from 'vue';
import ChildComponent from './ChildComponent.vue';
const asyncData = ref<any>();
// 假设fetchData是一个返回Promise的异步函数
const fetchData = async () => {
asyncData.value = await someAsyncOperation();
};
// 在数据准备好后立即监听它
watch(asyncData, (newVal, oldVal) => {
// 当asyncData变化时,子组件会自动更新
console.log('Data changed:', newVal);
});
fetchData();
</script>
子组件:
// ChildComponent.vue
<template>
<div>{{ asyncData }}</div>
</template>
<script setup lang="ts">
import { defineProps } from 'vue';
const props = defineProps({
asyncData: Object // 假设传递的是一个响应式对象
});
// 使用watch或者computed来响应式地使用传入的数据
</script>
确保在父组件中,你的异步操作(如fetchData
)在数据准备好后立即开始监听asyncData
。这样,当asyncData
的值变化时,子组件会自动更新显示的内容。
评论已关闭