Operaciones de datos remotas React Grid

    Por defecto, utilizaIgrGrid su propia lógica para realizar operaciones de datos.

    Puedes realizar estas tareas de forma remota y alimentar los datosIgrGrid resultantes aprovechando ciertas entradas y eventos que son expuestos por elIgrGrid.

    Infinite Scroll

    Un diseño popular para escenarios que requieren obtener datos por bloques desde un punto final es el llamado scroll infinito. En las cuadrículas de datos, se caracteriza por un aumento continuo de los datos cargados que se desencadena cuando el usuario final desplaza hasta el final. Los siguientes párrafos explican cómo puedes usar la API disponible para lograr fácilmente desplazamientoIgrGrid infinito.

    Para implementar el scroll infinito, tienes que obtener los datos en bloques. Los datos que ya se han recuperado deberían almacenarse localmente y tienes que determinar la longitud de un fragmento y cuántos fragmentos hay. También tienes que llevar un registro del último índice de filas de datos visible en la cuadrícula. De este modo, usando lasStartIndex propiedades yChunkSize, puedes determinar si el usuario sube y tienes que mostrarle datos ya obtenidos o desplazarse hacia abajo y obtener más datos desde el punto final.

    Lo primero que hay que hacer es recuperar el primer fragmento de los datos. Configurar latotalItemCount propiedad es importante, ya que permite que la cuadrícula tenga el tamaño correcto de su barra de desplazamiento.

    Además, tienes que suscribirte a laDataPreLoad salida para poder proporcionar los datos necesarios para la red cuando intente mostrar un fragmento diferente, en lugar del que está cargado actualmente. En el gestor de eventos, tienes que decidir si buscas nuevos datos o devuelves datos que ya están almacenados en caché localmente.

    Infinite Scroll Demo

    Remote Paging

    La función de localización puede funcionar con datos remotos. Para demostrar esto, primero declaremos que nuestro servicio será responsable de la obtención de datos. Necesitaremos el recuento de todos los elementos de datos para poder calcular el recuento de páginas. Esta lógica se agregará a nuestro servicio.

    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}`;
        }
    }
    

    Después de declarar el servicio, necesitamos crear un componente que será responsable de laIgrGrid construcción y la suscripción de datos.

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

    A continuación, configure el 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]);
    

    y finalmente configure el método para cargar los datos:

      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 obtener más información, consulte la muestra completa a continuación:

    Grid Remote Paging Demo

    y, por último, configura el comportamiento de las RowIslands:

    Known Issues and Limitations

    • Cuando la cuadrícula noprimaryKey tiene un sistema fijo y los escenarios de datos remotos están habilitados (al paginar, ordenar, filtrar o desplazar las solicitudes de disparo a un servidor remoto para recuperar los datos que se mostrarán en la cuadrícula), una fila perderá el siguiente estado tras completar una solicitud de datos:

    • Selección de fila

    • Fila Expandir/contraer

    • Edición de filas

    • Fijación de filas

    API References

    Additional Resources

    Nuestra comunidad es activa y siempre da la bienvenida a nuevas ideas.