無限スクロール リスト用に IntersectionObserver を設定しようとしています。リストの最後の項目に到達したかどうかを IntersectionObserver で確認したい。
これまでのところ、IntersectionObserverのセットアップは次のようになっています。
mounted() {
const config = {
treshold: 1
};
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.intersectionRatio > 0) console.log(entry.target);
});
}, config);
observer.observe(this.lastRenderedDeal());
}
私のリスト項目は次のようにレンダリングされます:
<deal :deal="deal"
:key="index"
ref="deals"
v-for="(deal, index) in deals"
</deal>
最後のrenderDealを取得するには、取引でを使用しref
ます。
lastRenderedDeal() {
const deals = this.$refs.deals;
return deals ? deals[deals.length - 1].$el : null;
}
これは初期設定で機能し、トリガーされます。問題は、無限スクロールが必要な場合、取引リストに追加し続ける必要があることです。そのlastRenderedDeal
ため、リストに追加された最後の取引を反映するように常に更新しています。
observer.observe
この反応性は、メソッドに渡されていないようです。それは私の最初の要素だけを拾います。フックでインスタンス化されているため、これは明らかなように思えますmounted
が、どうすればこれに対処できますか?
取引のウォッチャーを設定して、observer.observe を再度呼び出す必要がありますか? もしそうなら、最初に観察されたアイテムを置き換えるように単純に指示できますか?