[React] ag-grid์์ columnDef์ useMemo์ valueFormatter
0. ์ฒซ ๋ ๋๋ง. ์ฝ๋๋ถ ์กฐํ.
/** ์ฝ๋ ์ด๊ธฐ๊ฐ ์กฐํ */
useEffect(() => {
getCodeList(); // ์ฝ๋๋ถ ์กฐํ
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
1. ์ฝ๋๋ถ์์ ์ํ์ ๋ํ ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ setJobStausCd ํด์ค๋ค.
const [jobStatusCd, setJobStatusCd] = useState<Array<any>>([]);
2. ์ด ํ๋ฉด์ ์๋์กฐํ๊ฐ ๋์ด์, ์ฝ๋๋ถ ์กฐํ ํ์๋ ๋ฉ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ทธ ๋ฐ์ดํฐ๋ dsRowData์ ๋ฃ์ด์ค๋ค.
const [dsRowData, setDsRowData] = useState<Array<any>>([]);
3. ํด๋น ๋ฐ์ดํฐ์์ ์ํid ์นผ๋ผ์ด ์๋๋ฐ, id๊ฐ ์๋๋ผ name์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ด์,
1๋ฒ์์ setํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ค๋ค. (valueFormatter ์ฌ์ฉ)
const valueFormatter = (params: any) => {
return `${jobStatusCd?.find((element: any) => element.cdId === params.data.value)?.cdNm ?? ''} `;
};
4. jobStatusCd๋ฅผ ๋ถ๋ช ์ setํด์คฌ์์๋, valueFormatter ๋ด๋ถ์์ ๋ก๊ทธ๋ฅผ ์ฐ์ด๋ณด๋ฉด ๋น๊ฐ์ผ๋ก ๋์จ๋ค.
5. ์ปฌ๋ผ ์ ์ ๋ถ๋ถ์ด useMemo๋ก ๋์ด์์๋ค.
const columnDef = useMemo(
() => [
{ headerName: '์ํ', field: 'state' },
... ์๋ต
],
[]
);
https://ag-grid.com/react-data-grid/react-hooks/
If you do NOT use useState or useMemo, then the grid will be provided with a new set of Column Definitions every time the component is rendered.
ag-grid ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด useState๋ useMemo๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์๋ค.
6. valueFormatter๋ฅผ dependency Array๋ก ๋ฃ์ด์ฃผ๊ธฐ
const columnDef = useMemo(
() => [
{ headerName: '์ํ', field: 'state', valueFormatter },
... ์๋ต
],
[valueFormatter]
);
์ด๋ ๊ฒ ๋ฃ์ด์ฃผ๋, ๊ฐ์ด ์ ๋์จ๋ค!