<p>react-window-infinite-loader: lista invĂĄlida ref</p>

Criado em 24 mar. 2020  Â·  9ComentĂĄrios  Â·  Fonte: bvaughn/react-window

Eu segui as instruçÔes na documentação do carregador infinito, mas ainda estou vendo este aviso no console: Invalid list ref; please refer to InfiniteLoader documentation.

Meu cĂłdigo:

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>

O que estou fazendo de errado aqui? Obrigado!

ComentĂĄrios muito Ășteis

VocĂȘ pode tentar trocar InfiniteLoader e AutoSizer para que vocĂȘ tenha AutoSizer como o componente externo?

Isso funcionou para mim, se bem me lembro.

Todos 9 comentĂĄrios

VocĂȘ estĂĄ passando a referĂȘncia da proposta de renderização InfiniteLoader para o componente FixedSizeList ?

Sim, isso Ă© o que eu tenho atualmente:

<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>

VocĂȘ pode tentar trocar InfiniteLoader e AutoSizer para que vocĂȘ tenha AutoSizer como o componente externo?

Isso funcionou para mim, se bem me lembro.

Estou tendo o mesmo problema, embora tenha o AutoSizer como o componente externo

OlĂĄ @killpowa , vocĂȘ tem um exemplo que eu possa dar uma olhada?

Ei @chrisneven , Aqui estĂĄ o exemplo - codesandbox

Desde jĂĄ, obrigado. :)

OlĂĄ @ DevAKS-Yara,

Dei uma olhada no seu exemplo e vocĂȘ nĂŁo estĂĄ passando o ref do componente InfiniteLoader para o componente da sua lista ( VirtualTable ), entĂŁo esse Ă© o principal motivo para vocĂȘ receba aquela mensagem invalid ref .

Eu editei seu exemplo e implementei uma versĂŁo de trabalho

A principal lição aqui Ă© que quando vocĂȘ deseja outra referĂȘncia ao componente de lista e tambĂ©m usa o componente InfiniteLoader , vocĂȘ precisa escrever uma função de retorno de chamada que define o InfiniteLoader ref e quaisquer outras referĂȘncias que vocĂȘ precisar . Veja a função setRefs no componente VirtualTable .

OlĂĄ @ DevAKS-Yara,

Dei uma olhada no seu exemplo e vocĂȘ nĂŁo estĂĄ passando o ref do componente InfiniteLoader para o componente da sua lista ( VirtualTable ), entĂŁo esse Ă© o principal motivo para vocĂȘ receba aquela mensagem invalid ref .

Eu editei seu exemplo e implementei uma versĂŁo de trabalho

A principal lição aqui Ă© que quando vocĂȘ deseja outra referĂȘncia ao componente de lista e tambĂ©m usa o componente InfiniteLoader , vocĂȘ precisa escrever uma função de retorno de chamada que define o InfiniteLoader ref e quaisquer outras referĂȘncias que vocĂȘ precisar . Veja a função setRefs no componente VirtualTable .

Oh! Tentei passar o ref diretamente de InfiniteLoader para VirtualTable mas nĂŁo deu certo. Qual Ă© a diferença entre usar diretamente a referĂȘncia passada e configurar por meio da função de retorno de chamada?

BTW, obrigado pela solução! đŸ‘đŸŒ :)

BTW, obrigado pela solução! đŸ‘đŸŒ :)

De nada!

Oh! Tentei passar o ref diretamente de InfiniteLoader para VirtualTable mas nĂŁo deu certo. Qual Ă© a diferença entre usar diretamente a referĂȘncia passada e configurar por meio da função de retorno de chamada?

Bem, vocĂȘ tambĂ©m pode passar diretamente pelo ĂĄrbitro, mas, neste caso, aparentemente, vocĂȘ precisa ter vĂĄrias referĂȘncias. Usando uma "referĂȘncia de retorno de chamada", vocĂȘ pode atribuir vĂĄrias referĂȘncias a um nĂł DOM. De preferĂȘncia, vocĂȘ deve colocĂĄ-lo em um gancho useCallback . Isso garante que nossa referĂȘncia de retorno de chamada nĂŁo mude entre as novas renderizaçÔes.

Esta pĂĄgina foi Ăștil?
0 / 5 - 0 avaliaçÔes

QuestÔes relacionadas

migueloller picture migueloller  Â·  3ComentĂĄrios

Kizmar picture Kizmar  Â·  3ComentĂĄrios

ShivamJoker picture ShivamJoker  Â·  3ComentĂĄrios

maynir picture maynir  Â·  4ComentĂĄrios

marian-c picture marian-c  Â·  3ComentĂĄrios