- React의 기본 이론과 원리에 대한 이해를 통해, React 기반 웹 페이지와 기능 구현에는 어느정도 자신감이 생겼다.
- 단지,
'된다'
의 수준을 넘어,'더 나은 컴포넌트(코드) 작성은 어떻게 할까?'
라는 고민을 하게 되었다.- 이에 관한 몇 가지 서치를 했고, 이를 종합하여 나름 정리해보고자 한다.
출처 사이트
1: https://ko.reactjs.org/docs/faq-structure.html
2: https://www.codeinwp.com/blog/react-best-practices/
3: https://betterprogramming.pub/best-practices-i-wish-all-react-developers-knew-part-1-ff6cdee0666a
: 컴포넌트 임포트 시 상대경로가 복잡해지며, 해당 컴포넌트를 찾는데 어려움이 있으므로, 단일 프로젝트에서는 최대 3~4단계 이상으로 들어가지 않도록 설계
:데이터(state)가 업데이트 되면, 해당 데이터가 속해있는 컴포넌트 단위로 리랜더 되기 때문에, 이를 최소화하기 위해서는 세분화하는 것이 유리
(여기서 '데이터가 업데이트'란 의미는 결국 '기능'을 의미)
:구체적인 기능 별로 나눠져 있으면 디버깅이나 유지보수에도 유리
: 재사용성은 React와 같은 SPA에서 가장 핵심적인 장점이므로, 이를 극대화할 수 있는 전략이 필요
: 재사용을 통해 디버깅이나 유지보수가 쉬워지고, 코드가 간결해질 수 있음
: JSX가 일반 default HTML tag와 쉽게 구분할 수 있음
: Pascal Case는 첫 글자가 대문자로 시작하는 Camel Case
: 업데이트 되는 데이터 소스는 1개로 되어야, 여러번 업데이트 하지 않아도 됨
: 데이터 업데이트 시, re-render 측면에서 최소화 할 수 있도록 구현
: 새로운 코드가 기존 코드와 병합되어 졌을 때, 기능상 문제 없이 잘 돌아가는지 확인하기 위해 테스트가 필요
: _TEST_
폴더를 해당 컴포넌트 폴더 내에 만들어서 관리
: 크로스 브라우징 테스팅 tools(https://www.codeinwp.com/blog/best-cross-browser-testing-tools/)
: 기능 테스트(https://jestjs.io/)
// Don't pass primatives
<UserAccount
name={user.name}
email={user.email}
id={user.id}
/>
// Pass objects
<UserAccount user={user} />
: 가독성 향상을 위해 , 가급적 단순히 props 데이터를 받아 display기능만을 수행하는 map 함수 부분이면, 별도 컴포넌트로 분리 후 import
: 다만, 해당 컴포넌트의 주 역할이 map 내의 데이터를 보여주는데 있다면 동일 파일 내에 유지
// Don't write lops with the rest of the code
const Component = ({title, cards}) => {
return <div>
<h1>{title}</h1>
{
cards.map(({title: cardTitle, subtitle, image}) => ({
<div>
<h3>{cardTitle}</h3>
<h5>{subtitle}</h5>
<img src={image} />
</div>
}))
}
</div>
}
// Break it up into a separate list component
const Component = ({title, cards}) => {
return <div>
<h1>{title}</h1>
<CardsList cards={cards} />
</div>
}
상호 관련성이 깊거나, 함께 변경해야 하는 확률이 큰 파일이나 폴더는 최대한 인접하게 위치시키기
: 마치 UX를 설계하는 원리와 유사하게, 파일과 파일간의 이동 동선이 가장 짧고 직관적인 위치에 위치하도록 하는게 좋을 듯