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!
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 componenteInfiniteLoader
para o componente da sua lista (VirtualTable
), entĂŁo esse Ă© o principal motivo para vocĂȘ receba aquela mensageminvalid 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 oInfiniteLoader
ref e quaisquer outras referĂȘncias que vocĂȘ precisar . Veja a funçãosetRefs
no componenteVirtualTable
.
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
paraVirtualTable
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.
ComentĂĄrios muito Ășteis
VocĂȘ pode tentar trocar
InfiniteLoader
eAutoSizer
para que vocĂȘ tenhaAutoSizer
como o componente externo?Isso funcionou para mim, se bem me lembro.