React-window: useMemo à l'intérieur du composant _row_ lorsque le parent effectue un nouveau rendu

Créé le 18 févr. 2019  ·  3Commentaires  ·  Source: bvaughn/react-window

J'ai trouvé que useMemo permet d'éviter (complètement) de restituer toutes les lignes au fur et à mesure que la liste défile et j'aimerais que cela se produise également lorsque le composant parent (qui contient la liste) est restitué.

Démo :
https://codesandbox.io/s/v8k75vw0v0

Vous verrez que lorsque vous faites défiler, le message de journal Actual Row produit uniquement lorsqu'une nouvelle ligne est en cours de construction.

Ce n'est pas le cas lorsque vous cliquez sur le bouton Rerender parent .

En revanche, FakeList est capable de permettre au _row_ d'utiliser useMemo en utilisant le _row_ comme fonction au lieu d'un composant.

Donc, je suppose que c'est plus une question sur la façon de tirer pleinement parti de useMemo.

💬 question

Commentaire le plus utile

As-tu lu cette partie de la doc ? https://react-window.now.sh/#/examples/list/memoized -list-items

Il existe deux options de mémorisation intégrées :

Il ne semble pas que votre exemple utilise non plus, ce qui entraînera des rendus inutiles en raison de la façon dont la fenêtre de réaction gère son cache de style.

Je pense que ce problème ne nécessite aucun changement de la part de cette bibliothèque, je vais donc le fermer. Nous pouvons en parler davantage si vous avez des questions d'éclaircissement.

Tous les 3 commentaires

As-tu lu cette partie de la doc ? https://react-window.now.sh/#/examples/list/memoized -list-items

Il existe deux options de mémorisation intégrées :

Il ne semble pas que votre exemple utilise non plus, ce qui entraînera des rendus inutiles en raison de la façon dont la fenêtre de réaction gère son cache de style.

Je pense que ce problème ne nécessite aucun changement de la part de cette bibliothèque, je vais donc le fermer. Nous pouvons en parler davantage si vous avez des questions d'éclaircissement.

Rebonjour,

Mon exemple n'était pas le plus éloquent pour ce que j'ai essayé d'exprimer, mais je pense que je peux maintenant :

À partir de votre exemple (memoized-list-items), en plus de ne rendre que les _rows_ qui sont sur le point d'apparaître, je souhaite également minimiser les rendus lorsque vous _activez_ un élément (actuellement, lorsque vous cliquez sur un élément pour l'activer , toutes les _lignes_ de la vue sont re-rendues).

J'y suis finalement parvenu en utilisant la prop itemData sur FixedSizeList (cela me permet d'éviter une fermeture imbriquée); ceci à son tour me permet d'utiliser useMemo .

Ce problème devrait rester clos, mais je pense que c'est un exemple / exercice d'optimisation intéressant et j'apprécierais votre contribution.

Le résultat est ici : https://codesandbox.io/s/rr7w89w3q

J'évite les EXPENSIVE RENDER au prix d'un wrapper : CHEAP PREP .

Merci pour l'effort que vous mettez dans cette bibliothèque.

Ouais, ça a du sens. Si itemData change, cela va _intentionnellement_ casser le cache des éléments. Dans la plupart des cas, c'est ce que vous voulez faire pour éviter les données obsolètes. Si vous savez que ce n'est pas vrai pour un cas d'utilisation particulier, alors une logique personnalisée comme vous l'avez fait semble appropriée. ??

Cette page vous a été utile?
0 / 5 - 0 notes