Operações de dados remotos do React Grid
Por padrão, eleIgrGrid usa sua própria lógica para realizar operações de dados.
Você pode realizar essas tarefas remotamente e alimentar os dados resultantes para oIgrGrid aproveitando certos inputs e eventos, que são expostos peloIgrGrid.
Infinite Scroll
Um design popular para cenários que exigem buscar dados por blocos de um ponto final é o chamado scroll infinito. Para grades de dados, ele é caracterizado pelo aumento contínuo dos dados carregados acionados pelo usuário final que rola até o fundo. Os próximos parágrafos explicam como você pode usar a API disponível para alcançar facilmente rolagemIgrGrid infinita.
Para implementar o scroll infinito, você precisa buscar os dados em blocos. Os dados que já foram buscados devem ser armazenados localmente e você precisa determinar o comprimento de um bloco e quantos blocos existem. Você também precisa acompanhar o último índice visível de linhas de dados na grade. Dessa forma, usando asStartIndex propriedades e,ChunkSize você pode determinar se o usuário rola para cima e você precisa mostrar dados já buscados ou descer e buscar mais dados do ponto final.
A primeira coisa a fazer é buscar o primeiro pedaço dos dados. Definir atotalItemCount propriedade é importante, pois permite que a grade redimensione corretamente a barra de rolagem.
Além disso, você precisa assinar aDataPreLoad saída, para poder fornecer os dados necessários pela grade quando ela tentar exibir um pedaço diferente, em vez do que está carregado atualmente. No gerenciador de eventos, você precisa determinar se busca novos dados ou retorna dados que já estão cacheados localmente.
Infinite Scroll Demo
Remote Paging
O recurso de paginação pode operar com dados remotos. Para demonstrar isso, vamos primeiro declarar nosso serviço que será responsável pela busca de dados. Precisaremos da contagem de todos os itens de dados para calcular a contagem de páginas. Essa lógica será adicionada ao nosso serviço.
const CUSTOMERS_URL = `https://data-northwind.indigo.design/Customers/GetCustomersWithPage`;
export class RemoteService {
public static getDataWithPaging(pageIndex?: number, pageSize?: number) {
return fetch(this.buildUrl(CUSTOMERS_URL, pageIndex, pageSize))
.then((result) => result.json());
}
private static buildUrl(baseUrl: string, pageIndex?: number, pageSize?: number) {
let qS = "";
if (baseUrl) {
qS += `${baseUrl}`;
}
// Add pageIndex and size to the query string if they are defined
if (pageIndex !== undefined) {
qS += `?pageIndex=${pageIndex}`;
if (pageSize !== undefined) {
qS += `&size=${pageSize}`;
}
} else if (pageSize !== undefined) {
qS += `?perPage=${pageSize}`;
}
return `${qS}`;
}
}
Após declarar o serviço, precisamos criar um componente que será responsável pelaIgrGrid construção e assinatura de dados.
<IgrGrid
ref={grid}
data={data}
pagingMode="remote"
primaryKey="customerId"
height="600px"
isLoading={isLoading}
>
<IgrPaginator
perPage={perPage}
ref={paginator}
onPageChange={onPageNumberChange}
onPerPageChange={onPageSizeChange}>
</IgrPaginator>
<IgrColumn field="customerId" hidden={true}></IgrColumn>
<IgrColumn field="companyName" header="Company Name"></IgrColumn>
<IgrColumn field="contactName" header="Contact Name"></IgrColumn>
<IgrColumn field="contactTitle" header="Contact Title"></IgrColumn>
<IgrColumn field="address.country" header="Country"></IgrColumn>
<IgrColumn field="address.phone" header="Phone"></IgrColumn>
</IgrGrid>
Em seguida, configure o estado:
const grid = useRef<IgrGrid>(null);
const paginator = useRef<IgrPaginator>(null);
const [data, setData] = useState([]);
const [page, setPage] = useState(0);
const [perPage, setPerPage] = useState(15);
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
loadGridData(page, perPage);
}, [page, perPage]);
e, finalmente, configure o método para carregar os dados:
function loadGridData(pageIndex?: number, pageSize?: number) {
// Set loading state
setIsLoading(true);
// Fetch data
RemoteService.getDataWithPaging(pageIndex, pageSize)
.then((response: CustomersWithPageResponseModel) => {
setData(response.items);
// Stop loading when data is retrieved
setIsLoading(false);
paginator.current.totalRecords = response.totalRecordsCount;
})
.catch((error) => {
console.error(error.message);
setData([]);
// Stop loading even if error occurs. Prevents endless loading
setIsLoading(false);
})
}
Para mais referência, por favor, verifique a amostra completa abaixo:
Grid Remote Paging Demo
e, finalmente, configurar o comportamento para as RowIslands:
Known Issues and Limitations
Quando a grade não
primaryKeytem um set definido e cenários de dados remotos são ativados (ao paginar, ordenar, filtrar, rolar requisições de gatilho para um servidor remoto para recuperar os dados a serem exibidos na grade), uma linha perderá o seguinte estado após a conclusão de uma solicitação de dados:Seleção de linha
Expandir/recolher linha
Edição de linha
Fixação de linha
API References
Additional Resources
- Paginação
- Virtualização e desempenho
- Filtragem
- Classificação
- Resumos
- Movimentação de Colunas
- Fixação de coluna
- Redimensionamento de colunas
- Escolha
Nossa comunidade é ativa e sempre acolhedora para novas ideias.