GRID FEATURE · PRO

보이는 구간을 스트리밍

전체 데이터 개수는 알지만 현재 보이는 행만 지속 갱신하려는 시세·모니터링 화면에 적합합니다. 스크롤 범위에 맞춰 구독 범위를 바꾸는 것이 핵심입니다.

동작 원리와 선택 기준

init에서 받은 setRowCount와 setRowData를 보관하고 setViewportRange의 범위 요청에 응답합니다. 원격 응답에 대해서는 요청 순서와 화면 해제 상태를 함께 확인하세요.

이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다.

코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요.

예제 1. 정적인 원격 구간 공급

시작·끝 범위를 받는 앱 API의 반환 형식을 { rows }로 정한 예입니다.

javascript
let callbacks;
let revision = 0;
grid.viewportDatasource = {
  init(api) { callbacks = api; api.setRowCount(100000); },
  async setViewportRange(first, last) {
    const current = ++revision;
    const response = await fetch('/api/quotes?first=' + first + '&last=' + last);
    if (!response.ok) return;
    const { rows } = await response.json();
    if (current === revision) callbacks.setRowData(first, rows);
  },
  destroy() { revision++; }
};

결과 확인: 최근 요청 범위에 대해서만 행이 채워집니다. 실패 상태 표시는 앱의 오류 UI와 함께 연결하세요.

예제 2. 보이는 시세만 구독

setViewportRange가 바뀔 때 이전 소켓 구독을 해제하고 새 범위의 상품 ID를 구독합니다. 서버 메시지를 받으면 해당 행 위치에 갱신 데이터를 공급합니다.

결과 확인: 전체 시장 데이터를 브라우저에 계속 보내지 않아도 현재 보는 구간을 최신으로 유지할 수 있습니다.

예제 3. 종료와 전체 개수 변경

데이터셋이 달라지면 전체 행 수와 구간 데이터를 함께 갱신합니다. 화면을 닫을 때 destroy에서 소켓·타이머·진행 요청을 정리합니다.

결과 확인: 이전 화면에서 도착한 메시지가 새 Grid를 덮어쓰지 않습니다. 행 개수가 줄면 현재 스크롤 위치가 유효한지도 확인합니다.

조합할 때와 문제를 해결할 때

뷰포트의 행 위치는 업무 ID와 같지 않습니다. 정렬이 바뀌면 같은 위치에 다른 상품이 들어올 수 있으므로 서버 기준 순서를 함께 관리하세요.

숫자가 자주 바뀌는 화면에서는 변경 강조와 업데이트 빈도를 조절하세요. 보이지 않는 행까지 매번 DOM으로 만들 필요는 없습니다.

함께 읽기