utils_react-nexacro_hooks.js
import React from "react";
/**
* 넥사크로 데이터셋(Dataset)의 변경 이벤트를 구독하여,
* 데이터나 로우 포지션이 변경될 때마다 React 컴포넌트를 리렌더링하게 만드는 훅입니다.
*
* @function useNexacroDataset
* @param {nexacro.Dataset} dataset - 구독할 넥사크로 데이터셋 객체
* @returns {nexacro.Dataset} 전달받은 데이터셋 객체를 그대로 반환
* @memberof $react
* @example
* function MyGrid() {
* // 부모로부터 받거나 컨텍스트 등에서 구한 데이터셋 객체
* const ds = useNexacroDataset(this.ds_list);
*
* return React.createElement(NxGrid, { binddataset: ds.name });
* }
*
*/
export function useNexacroDataset(dataset) {
const [, forceRender] = React.useReducer((s) => s + 1, 0);
React.useEffect(() => {
if (!dataset) return;
const handleUpdate = () => {
forceRender();
};
// 데이터셋 상태 변경과 관련된 핵심 이벤트들을 구독
dataset.addEventHandler("onrowsetchanged", handleUpdate, this);
dataset.addEventHandler("onrowposchanged", handleUpdate, this);
dataset.addEventHandler("oncolumnchanged", handleUpdate, this);
dataset.addEventHandler("onload", handleUpdate, this);
return () => {
// 언마운트 시 구독 해제
dataset.removeEventHandler("onrowsetchanged", handleUpdate, this);
dataset.removeEventHandler("onrowposchanged", handleUpdate, this);
dataset.removeEventHandler("oncolumnchanged", handleUpdate, this);
dataset.removeEventHandler("onload", handleUpdate, this);
};
}, [dataset]);
return dataset;
}