React-window: 行数が多い FixedSizeList でのスクロール中の空白 (1 行に 8 つのマテリアル UI カード)

作成日 2019年01月07日  ·  4コメント  ·  ソース: bvaughn/react-window

こんにちは、

この素晴らしいライブラリをありがとう。

FixedSizeList の使用中に行コンポーネントが重い場合に問題が発生します。 トラックパッドを使用して非常に高速にスクロールすると、空白が発生します。

この問題を説明するためにデモを掲載しました (実際のカードはデモで使用されているものよりもはるかに重い) - https://codesandbox.io/s/n746q40970 / https://n746q40970.codesandbox.io/

1 行内に 8 つのマテリアル UI カードをレンダリングしていて、スクロール中に空白が表示されますが、1 または 2 枚のカードを使用すると、これらの空白が表示されません。

このシナリオを処理する方法を理解するのを手伝ってもらえますか?

ありがとう
アシッシュ

💬 question

最も参考になるコメント

スクロールが最初に開始されるときのこのタイプの空白は、残念ながら、このライブラリで使用されるウィンドウ テクニックで必要なトレードオフになります。 スクロール ハンドラーを強制的に同期させない限り (ユーザーにとってスクロールが遅くてぎこちない感じになるだけです)、これを完全に回避することはできません。

できること:

  • 行レンダラーを可能な限り高速にします。 場合によっては、スクロールがアクティブなときに軽量の表現を使用することを検討することがあります (ここを参照)。
  • このようなメモ化テクニックを使用します。 デモについては、こちらをご覧ください。
  • さまざまなoverscanRowCount値を試してください。 (あなたの場合、2 は 1 に対してより適切に機能しますか?
  • プロファイラーを使用して、レンダリング パフォーマンスを確認します。
  • 本番モードでパフォーマンスを確認します。 (Code Sandbox のデモは、はるかに遅い DEV モードで実行されて

全てのコメント4件

スクロールが最初に開始されるときのこのタイプの空白は、残念ながら、このライブラリで使用されるウィンドウ テクニックで必要なトレードオフになります。 スクロール ハンドラーを強制的に同期させない限り (ユーザーにとってスクロールが遅くてぎこちない感じになるだけです)、これを完全に回避することはできません。

できること:

  • 行レンダラーを可能な限り高速にします。 場合によっては、スクロールがアクティブなときに軽量の表現を使用することを検討することがあります (ここを参照)。
  • このようなメモ化テクニックを使用します。 デモについては、こちらをご覧ください。
  • さまざまなoverscanRowCount値を試してください。 (あなたの場合、2 は 1 に対してより適切に機能しますか?
  • プロファイラーを使用して、レンダリング パフォーマンスを確認します。
  • 本番モードでパフォーマンスを確認します。 (Code Sandbox のデモは、はるかに遅い DEV モードで実行されて

@bvaughn - @ashishgupta1989scrollSyncフラグを設定して、同じ動作を取得できるようにしたいと思います。

したがって、これは機能します:

return createElement(outerElementType || outerTagName || 'div', {
    ...
    onWheel: function (e) {
        e.preventDefault()
        e.currentTarget.scrollTop += e.deltaY
    },

このスタック オーバーフローの回答に触発されました: https://stackoverflow.com/questions/12747746/how-to-disable-smooth-scrolling-in-chrome

この修正をフックする新しいプロペラscrollSyncを使用してプル リクエストを送信した場合、それを受け入れますか?

検討のためにプル リクエストをいつでも歓迎します。 スクロール イベント ハンドラーを強制的にブロックすることは、おそらく API にサポートを追加したくないものであることは認めますが、PR を読んで検討します。

このページは役に立ちましたか?
0 / 5 - 0 評価