Проблема с текущим кодом заключается в том, что переменная placeholders является общей для всех элементов и всегда имеет одно значение. Чтобы исправить это, необходимо использовать объект Map, в котором ключом будет являться уникальный идентификатор элемента, а значением - флаг, показывающий, является ли элемент видимым или нет.
Перепишем код, чтобы использовать Map:
```javascript
<template v-for="(item, index) in section.items">
<li
v-node-intersect="() => handleIntersection(index)"
class="feed-list-item"
:key="index"
>
<feed-item v-if="!isPlaceholder(index)" :item="item" />
<content-placeholder v-else />
</li>
</template>
<script>
import { ref, onMounted } from 'vue'
const intersectionObserver = ref(null)
const placeholders = ref(new Map())
onMounted(() => {
intersectionObserver.value = new IntersectionObserver(handleIntersection)
})
function handleIntersection(index) {
return (entries) => {
const entry = entries[0]
if (entry.isIntersecting) {
placeholders.value.delete(index)
} else {
if (!placeholders.value.has(index)) {
placeholders.value.set(index, true)
}
}
}
}
function isPlaceholder(index) {
return placeholders.value.has(index)
}
</script>
```
Теперь переменная placeholders - это объект Map, в котором находятся уникальные идентификаторы элементов и их состояния видимости. Когда элемент становится видимым, он удаляется из Map, а когда он становится невидимым, он добавляется в Map. Теперь каждый элемент будет иметь уникальное значение идентификатора, которое будет использоваться для определения показа или замены на Placeholder.