compact ํจ์๋ ๋ฐฐ์ด์์ falsy ๊ฐ(null, undefined, false, 0, '', NaN ๋ฑ)์ ์ ๊ฑฐํ์ฌ ์ ํจํ ๊ฐ์ฒด๋ง ํฌํจํ๋ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ ์ ํธ๋ฆฌํฐ ํจ์์
๋๋ค. ์ด๋ ๋ฐฐ์ด์ ์ ๋ฆฌํ๊ฑฐ๋ ํํฐ๋งํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
actionButtons={compact([ { type: 'secondary', label: '์ทจ์', action: handleCancel }, data?.needsExpiry && { type: 'primary_light', label: 'ํ์ธ', action: handleSaveExpiry }, ])}
์ฌ๊ธฐ์ compact๋ ๋ฐฐ์ด ๋ด ๋ ๋ฒ์งธ ์์๊ฐ ์กฐ๊ฑด๋ฌธ(data?.needsExpiry && ...)์ ๋ฐ๋ผ undefined ๋๋ false๊ฐ ๋ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. data?.needsExpiry๊ฐ false์ด๊ฑฐ๋ undefined์ด๋ฉด ํด๋น ์์๋ ์ ์ธ๋๊ณ , actionButtons์๋ ์ ํจํ ๋ฒํผ ๊ฐ์ฒด๋ง ํฌํจ๋ฉ๋๋ค.
๐ data.needsExpiry๊ฐ true์ธ ๊ฒฝ์ฐ
compact([ { type: 'secondary', label: '์ทจ์', action: handleCancel }, { type: 'primary_light', label: 'ํ์ธ', action: handleSaveExpiry } ])
๊ฒฐ๊ณผ: [{ type: 'secondary', label: '์ทจ์', action: handleCancel }, { type: 'primary_light', label: 'ํ์ธ', action: handleSaveExpiry }]
๐ data.needsExpiry๊ฐ false์ด๊ฑฐ๋ undefined์ธ ๊ฒฝ์ฐ
compact([ { type: 'secondary', label: '์ทจ์', action: handleCancel }, undefined // data?.needsExpiry && ...๋ falsy์ด๋ฏ๋ก undefined ])
โ ๊ฒฐ๊ณผ: [{ type: 'secondary', label: '์ทจ์', action: handleCancel }]
- compact๋ ๋ฐฐ์ด์์ falsy ๊ฐ์ ์ ๊ฑฐํ์ฌ UI ์ปดํฌ๋ํธ(์ฌ๊ธฐ์๋ ๋ฒํผ ๋ชฉ๋ก)๋ฅผ ๋์ ์ผ๋ก ๋ ๋๋งํ ๋ ์ ํจํ ๋ฐ์ดํฐ๋ง ํฌํจํ๋๋ก ํฉ๋๋ค.
- ์กฐ๊ฑด๋ถ ๋ฒํผ ๋ ๋๋ง ์ ์ ์ฉํ๋ฉฐ, ์ฝ๋์ ์์ ์ฑ๊ณผ ๊ฐ๊ฒฐ์ฑ์ ์ ์งํ๋ ๋ฐ ๊ธฐ์ฌํฉ๋๋ค.
- ์ด ํจ์๋ Lodash์ _.compact์ ์ ์ฌํ ์ญํ ์ ํ๋ฉฐ, React ๊ฐ์ ํ๋ ์์ํฌ์์ ๋์ UI ๋ ๋๋ง์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.