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.
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. ??
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 :
React.memo
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.