無限スクロールを実現する
7/23/2019

インストールする

vue-infinite-loading

yarn add vue-infinite-loading

型を定義する

下記の通り型を定義する。

declare module 'vue-infinite-loading' {
  import Vue from 'vue'

  export default class InfiniteLoading extends Vue {
    spinner: string;
    direction: string;
    distance: number;
    onInfinite: Function;
    forceUseInfiniteWrapper: boolean;
  }

  export interface StateChanger {
    complete(): void;
    loaded(): void;
    reset(): void;
  }
}

後になって気付いたんですが、開発元の issue を見ると載っていたようです。

[TypeScript definition?]8https://github.com/PeachScript/vue-infinite-loading/issues/139#issue-307231773)

ただし SSR の下では使えない

デフォルトのデータを読み込み終えると「読み込み終わった」ことを表す。

もちろんカスタム化も可能、適宜コンポーネントを挿入していただければと良さそうです。


    
        <span>読み込み終わりました</span>
    

infiniteHandler() を使って 10 秒後に表示されるようした。

infiniteHandler($state: any) {
    setTimeout(() =&gt; {
        if (this.count &lt; this.posts.length) {
            this.count += 9
            $state.loaded()
        } else {
            $state.complete()
        }
    }, 1000)
}

これで無限スクロールが実現できた。

あわせてよみたい..