React-window: 親が再レンダリングするときの_row_コンポーネント内のuseMemo

作成日 2019年02月18日  ·  3コメント  ·  ソース: bvaughn/react-window

useMemoは、リストがスクロールするときにすべての行を(完全に)再レンダリングすることを回避するのに役立つことがわかりました。これは、(リストを保持する)親コンポーネントが再レンダリングするときにも発生するようにしたいと思います。

デモ:
https://codesandbox.io/s/v8k75vw0v0

スクロールすると、新しい行が作成されているときにのみActual Rowログメッセージが表示されることがわかります。

これは、 Rerender parentボタンをクリックした場合には当てはまりません。

対照的に、 FakeListは、コンポーネントではなく関数として_row_を使用することにより、_row_がuseMemoを利用できるようにすることができます。

ですから、これはuseMemoを十分に活用する方法についての質問だと思います。

💬 question

最も参考になるコメント

ドキュメントのこの部分を読みましたか? https://react-window.now.sh/#/examples/list/memoized -list-items

2つの組み込みのメモ化オプションがあります。

例でも使用されているようには見えません。これにより、react-windowがスタイルキャッシュを管理する方法が原因で、不要な再レンダリングが発生します。

この問題は、このライブラリの一部を変更する必要はないと思うので、クローズします。 ご不明な点がございましたら、お気軽にお問い合わせください。

全てのコメント3件

ドキュメントのこの部分を読みましたか? https://react-window.now.sh/#/examples/list/memoized -list-items

2つの組み込みのメモ化オプションがあります。

例でも使用されているようには見えません。これにより、react-windowがスタイルキャッシュを管理する方法が原因で、不要な再レンダリングが発生します。

この問題は、このライブラリの一部を変更する必要はないと思うので、クローズします。 ご不明な点がございましたら、お気軽にお問い合わせください。

またあったね、

私の例は、私が表現しようとしたことに対して最も雄弁ではありませんでしたが、今はできると思います。

あなたの例(memoized-list-items)から始めて、表示されようとしている_rows_をレンダリングするだけでなく、アイテムを_アクティブ化_するとき(現在、アイテムをクリックしてアクティブ化するとき)のレンダリング最小化したいと思います。 、ビュー内のすべての_rows_が再レンダリングされます)。

私が最終的に達成していること使用してitemData小道具のFixedSizeList (これは私がネストされたクロージャを避けましょう)。 これにより、 useMemo使用できるようになります。

この問題は解決されたままである必要がありますが、これは興味深い例/最適化の演習であると思います。さらにご意見をお寄せいただければ幸いです。

結果はここにあります: https

ラッパーを犠牲にしてEXPENSIVE RENDERを避けます: CHEAP PREP

このライブラリにご尽力いただきありがとうございます。

ええ、それは理にかなっています。 itemDataが変更されると、アイテムのキャッシュが_意図的に_破壊されます。 ほとんどの場合、これは古いデータを回避するために実行したいことです。 これが特定のユースケースに当てはまらないことがわかっている場合は、これまでに行ったようなカスタムロジックが適切と思われます。 👍

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