728x90
반응형
목차
저번 카테고리별 마커에 적절한 이미지를 넣고 더 컴포넌트를 세부화 시켜 작성해 보았다.
완성 모습
컴포넌트의 세분화
아래 코드를 보면 크게 컴포넌트를 카테고리, 사이드바, 프로필, 메뉴 4개로 만들었다.
import { ReactElement } from 'react';
import styles from './KakaoHeader.module.scss';
import SideBar from '../sidebar/SideBar';
import HeaderCategory from './HeaderCategory';
import HeaderProfileMenu from './HeaderProfileMenu';
// 카테고리 헤더
function KakaoHeader(): ReactElement {
// console.log(MarkerState);
return (
<div className={styles.category}>
<img
src="../img/sejonglogo.png"
alt="LogoImage"
className={styles.ImgStyle}
/>
<HeaderCategory />
<SideBar />
<div className={styles['profile-menu']}>
<HeaderProfileMenu isButton="div" name="profile" />
<HeaderProfileMenu isButton="button" name="menu" />
</div>
</div>
);
}
export default KakaoHeader;
컴포넌트의 재활용성 증가
공통 부분을 빼내어 컴포넌트의 재활용을 높였다
import styles from './HeaderProfileMenu.module.scss';
export interface style_menu {
isButton: string;
name: string;
}
function HeaderProfileMenu({ isButton, name }: style_menu) {
const ContainerComponent = isButton ? 'button' : 'div';
return (
<ContainerComponent className={styles[`${name}`]}>
<img
src={`./img/${name}.png`}
alt={name}
className={styles[`${name}-img`]}
/>
</ContainerComponent>
);
}
export default HeaderProfileMenu;
recoil의 사용
저번 코드와 달리 props 드릴링을 막기 위해 recoil을 통해 전역적으로 관리해주었다.
import { markers } from 'services/mocks/marker';
import { useRecoilState } from 'recoil';
import { DataMarkerProps } from 'configs/interface/KakaoMapInterface';
import DeleteMarks from './DeleteMarks';
import styles from './HeaderCategory.module.scss';
import { markerState } from '../recoil/MakerAtom';
function HeaderCategory() {
const [_, setMarkerState] = useRecoilState<DataMarkerProps[]>(markerState);
return (
<div>
{markers.map((mark, index: number) => {
return (
<div
key={`${mark.Positions[index].lat},${mark.Positions[index].lng}`}
className={styles['category-container']}
>
<button
className={styles['category-button']}
type="button"
onClick={() => DeleteMarks(mark.name, setMarkerState)}
>
<img
src={`/img/${mark.name}.png`}
alt="CategoryImage"
className={styles['img-container']}
key={mark.name}
/>
</button>
{mark.name}
</div>
);
})}
</div>
);
}
export default HeaderCategory;
폴더 구조
파스칼 표기법에 따라 열심히 작명해 주었다.
처음에는 작명이 왜 중요한지 몰랐는데 협업 시에 꼭 지켜주어야 구성원들이 명확하게 알 수 있다는 것을 느꼈다.
파스칼 표기법이 궁금하다면..
개발자들의 약속 : 코드 표기법 (카멜, 파스칼, 스네이크)
카멜 표기법 (Camel Case)카멜 표기법(Camel Case)은 프로그래밍 및 식별자 이름 작성 규칙 중 하나로, 다양한 프로그래밍 언어 및 플랫폼에서 사용되는 네이밍 규칙 중 하나입니다. 카멜 표기법의 주
velog.io
이전 카테고리별 마커 참고
https://be-senior-developer.tistory.com/61
[재활용 프로젝트][리액트] 카카오 api 분류별 마커 표시 컴포넌트화
목차 저번 맵 불러오는 것에 이어서 마커들을 버튼을 누를때 마다 종류별로 보이게끔 해보았다. 그 과정에서 리액트로 컴포넌트화하고 리팩토링한 것을 정리해 보려고 한다. 타입을 지정해주는
be-senior-developer.tistory.com
반응형
'프로젝트 > 재활용프로젝트' 카테고리의 다른 글
[리액트][재활용 프로젝트] 댓글 crud 구현 (0) | 2024.06.07 |
---|---|
[재활용 프로젝트][리액트] 메인 화면 재구상하기 (0) | 2024.05.23 |
[재활용프로젝트][리액트] main화면 구성하기 (0) | 2024.05.08 |
[프로젝트][리액트] 사이드 바 구현하기 (0) | 2024.05.02 |
[재활용 프로젝트][리액트] 카카오 api 분류별 마커 표시 컴포넌트화 (1) | 2024.04.03 |