<p>react-window-infinite-loader : référence de liste non valide</p>

Créé le 24 mars 2020  ·  9Commentaires  ·  Source: bvaughn/react-window

J'ai suivi les instructions de la documentation du chargeur infini mais je vois toujours cet avertissement dans la console : Invalid list ref; please refer to InfiniteLoader documentation.

Mon code :

import InfiniteLoader from "react-window-infinite-loader";
const infiniteLoaderRef = useRef<InfiniteLoader>(null);

<InfiniteLoader
  isItemLoaded={index => index < items.length}
  itemCount={1000}
  threshold={20}
  loadMoreItems={loadMoreItems}
  ref={infiniteLoaderRef}
>
...
</InfiniteLoader>

Qu'est-ce que je fais mal ici ? Merci!

Commentaire le plus utile

Pouvez-vous essayer d'échanger InfiniteLoader et AutoSizer afin d'avoir AutoSizer comme composant externe ?

Cela a fonctionné pour moi si je me souviens bien.

Tous les 9 commentaires

Vous êtes de passage l'arbitre de la InfiniteLoader rendre accessoire à FixedSizeList composante?

Oui voilà ce que j'ai actuellement :

<InfiniteLoader
  isItemLoaded={index => index < items.length}
  itemCount={1000}
  threshold={20}
  loadMoreItems={loadMoreItems}
  ref={infiniteLoaderRef}
>
  {({ onItemsRendered, ref }) => (
    <AutoSizer style={{ minHeight: "800px" }}>
      {({ height, width }) => (
        <VariableSizeGrid
          columnWidth={_index => width / numberOfColumns}
          columnCount={numberOfColumns}
          rowCount={Math.ceil(items.length / numberOfColumns)}
          rowHeight={_index => heightOfRow}
          height={height}
          width={width}
          ref={ref}
        >
          {props => <GridItem {...props} />}
        </VariableSizeGrid>
      )}
    </AutoSizer>
  )}
</InfiniteLoader>

Pouvez-vous essayer d'échanger InfiniteLoader et AutoSizer afin d'avoir AutoSizer comme composant externe ?

Cela a fonctionné pour moi si je me souviens bien.

J'ai le même problème même si j'ai AutoSizer comme composant externe

Salut @killpowa , avez-vous un exemple que je peux consulter ?

@chrisneven , voici l'exemple - codesandbox

Merci d'avance. :)

Salut @DevAKS-Yara,

J'ai examiné votre exemple et vous ne transmettez pas le ref du composant InfiniteLoader à votre composant de liste ( VirtualTable ), c'est donc la principale raison pour laquelle vous reçois ce invalid ref message.

J'ai modifié votre exemple et mis en place une version de travail

Le principal à retenir ici est que lorsque vous souhaitez une autre référence au composant de liste et que vous utilisez également le composant InfiniteLoader , vous devez écrire une fonction de rappel qui définit la référence InfiniteLoader et toutes les autres références dont vous avez besoin . Voir la fonction setRefs dans le composant VirtualTable .

Salut @DevAKS-Yara,

J'ai examiné votre exemple et vous ne transmettez pas le ref du composant InfiniteLoader à votre composant de liste ( VirtualTable ), c'est donc la principale raison pour laquelle vous reçois ce invalid ref message.

J'ai modifié votre exemple et mis en place une version de travail

Le principal à retenir ici est que lorsque vous souhaitez une autre référence au composant de liste et que vous utilisez également le composant InfiniteLoader , vous devez écrire une fonction de rappel qui définit la référence InfiniteLoader et toutes les autres références dont vous avez besoin . Voir la fonction setRefs dans le composant VirtualTable .

Oh! J'ai essayé de passer ref directement de InfiniteLoader à VirtualTable mais ça ne s'est pas bien passé. Quelle est la différence entre l'utilisation directe de la référence transmise et la configuration via la fonction de rappel ?

BTW, merci pour la solution! :)

BTW, merci pour la solution! :)

De rien!

Oh! J'ai essayé de passer ref directement de InfiniteLoader à VirtualTable mais ça ne s'est pas bien passé. Quelle est la différence entre l'utilisation directe de la référence transmise et la configuration via la fonction de rappel ?

Eh bien, vous pouvez également passer directement la référence, mais dans ce cas, vous avez apparemment besoin de plusieurs références. En utilisant une "référence de rappel", vous pouvez attribuer plusieurs références à un nœud DOM. De préférence, vous devriez le mettre dans un crochet useCallback . Cela garantit que notre référence de rappel ne change pas entre les nouveaux rendus.

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

Questions connexes

ajayns picture ajayns  ·  3Commentaires

maynir picture maynir  ·  4Commentaires

vinnymac picture vinnymac  ·  3Commentaires

bnikom picture bnikom  ·  3Commentaires

jsu93 picture jsu93  ·  4Commentaires