React.js

팩토리 패턴을 이용하여 동적 탭 메뉴 리스트 만들기

Dev갱이 2024. 8. 10. 14:36
728x90
export interface TabeMenuListType {
	link: string;
	options: Union<typeof TabMenus>;
	title: string;
}

export const feedTabMenus: TabeMenuListType[] = [
	{
		link: '/feeds?options=TOP',
		options: 'TOP',
		title: 'TOP',
	},
	{
		link: '/feeds?options=MYFEED',
		options: 'MYFEED',
		title: 'MYFEED',
	},
	{
		link: '/feeds?options=ALL',
		options: 'ALL',
		title: 'ALL',
	},
];

<div className={styles.tap_menu_container}>
    <TabMenu list={feedTabMenus} options={query.options} />
</div>

 

객체 배열을 이용하여 list에 따라 탭메뉴를 만드는 코드인데 중복 코드를 줄이는 흔한 방법이다. 하지만 이렇게 사용 할때 정적으로 리스트를 생성하기 때문에 동적으로 리스트를 생성 해야 할때 문제가 발생한다.

 

예를 들어 /accounts/:email 에서 탭메뉴를 구현할 때 email 이라는 동적인 pathValue가 존재 한다면 이것을 link로 만드는것은 한계가 있다.

 

팩토리 패턴을 이용하여 동적 탭 메뉴 리스트 만들기

export interface TabeMenuListType {
    link: string;
    options: Union<typeof TabMenus>;
    title: string;
}

export const makeTabMenuItem = (item: TabeMenuListType) => {
    return item;
};

// TabMenu 컴포넌트를 호출하는 컴포넌트에서 동적으로 탭 메뉴 생성하기
<TabMenu
        list={[
            makeTabMenuItem({
                link: `/accounts/${email}?options=MYFEED`,
                options: 'MYFEED',
                title: '작성 피드',
            }),
            makeTabMenuItem({
                link: `/accounts/${email}?options=MYSCHEDULE`,
                options: 'MYSCHEDULE',
                title: '작성 일정',
            }),
        ]}
        options={query.options}
></TabMenu>
TabMenu 컴포넌트를 호출하는 컴포넌트에서 동적으로 탭 메뉴 생성 할 수 있게 된다.

 

728x90