React 16.2 Fragment 문법 적용 후기
배경
프로젝트에서 불필요한 div 래퍼가 너무 많아 DOM 구조가 복잡해지는 문제가 있었다. 특히 리스트 렌더링이나 조건부 렌더링 시 의미 없는 div가 계속 쌓였다.
React 16.2에서 Fragment 단축 문법(<>)이 추가되어 바로 적용해봤다.
적용 전후
Before
render() {
return (
<div>
<h1>Title</h1>
<p>Content</p>
</div>
);
}
After
render() {
return (
<>
<h1>Title</h1>
<p>Content</p>
</>
);
}
제약사항
단축 문법은 key나 attributes를 받을 수 없다. 리스트 렌더링에서는 여전히 <React.Fragment>를 써야 했다.
{items.map(item => (
<React.Fragment key={item.id}>
<dt>{item.term}</dt>
<dd>{item.description}</dd>
</React.Fragment>
))}
결과
- DevTools에서 DOM 트리가 훨씬 깔끔해짐
- CSS 선택자 작성 시 불필요한 depth 고려 안 해도 됨
- Babel 7.0.0-beta로 업그레이드 필요 (JSX Fragment 지원)
프로젝트 전반에 적용하니 컴포넌트 구조가 한결 명확해졌다. 특히 table이나 dl 같은 특정 구조를 요구하는 HTML 요소 다룰 때 유용했다.