๋ฐ์ํ
์ด ๊ธ์ ์๊ธ์ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
Definition
TypeScript Generics๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ์์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๋๊ตฌ์ ๋๋ค. generics๋ ํ๋ก๊ทธ๋จ์ด ์ฅ๊ธฐ์ ์ผ๋ก ํ์ฅ๊ฐ๋ฅํ ๋ฟ๋ง ์๋๋ผ ์ ์ฐํ ์ ์๋๋ก ๋ณด์ฅํด์ค๋๋ค.
Example
# Props
interface Props<T> {
renderItem: (item: T) => React.ReactNode;
keyExtractor: (item: T) => string;
data: T[];
}
- data: ์ ๋ค๋ฆญ ํ์ T๋ฅผ ๋ฐ์ ๋ฐฐ์ด ์์
- renderItem: ํ์ T์ react ์์๋ฅผ ๋ฐํํ๋ ํจ์
- keyExtractor: ํค๋ฅผ ์ถ์ถํ๋ ํจ์
# Component ์ ์
const GenericList = <T extends unknown>({
data,
renderItem,
keyExtractor
}): Props<T>) => {
return (
<div>
{data.map((item) => (
<div key={keyExtractor(item)} className="item">
{renderItem(item)}
</div>
))}
</div>
);
};
export default GenericList;
GenericList ์ปดํฌ๋ํธ๋ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ๋ก๋ถํฐ type์ ์ถ์ถํฉ๋๋ค. renderItem์ ์ ๋ฌ๋ ๋ฐ์ดํฐ type์ ์์กดํ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋์์ด ๋ฉ๋๋ค.
Conclusion
Generic components๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ง๋ณด์, refactorableํ ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
https://medium.com/edonec/creating-a-generic-component-with-react-typescript-2c17f8c4386e
๋ฐ์ํ