Можно сделать компонент-обертку для картинок и использовать его внутри post
<!-- ImageWrapper.vue -->
<template>
<div>
<img v-if="isLoaded" :src="src" />
<div v-else class="placeholder">Загрузка...</div>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
const props = defineProps({
src: {
type: String,
required: true
}
});
const isLoaded = ref(false);
const loadImage = () => {
const img = new Image();
img.onload = () => {
isLoaded.value = true;
};
img.src = props.src;
};
onMounted(() => {
loadImage();
});
</script>
<!-- Post.vue -->
<template>
<div class="post">
<ImageWrapper
v-for="image in postData.images"
:key="image.id
:src=image.src"
/>
</div>
</template>
<Post
v-for="post in posts"
:key="post.id"
:postData="post"
/>