티스토리 뷰
Atomic Design 관련해서 기술 블로그를 보다가 원자 단위의 컴포넌트를 합치는 과정에서 <div> 태그로 감싸는 것을 보았다.
그 코드를 보고, `음, 빈 태그(<></>)로 감싸면 안 되나? 의미상 차이가 큰가?`라는 생각을 하게 되었다. 그리고 '빈 태그가 React.Fragment와 같다고 했던 거 같은데' 하는 생각이 연달아 들었기에 호다닥 <div>, <>, React.Fragment를 살짝 정리해보고 왜 <div>로 감싸게 되었는지 알아보려고 한다.
<div>
div 태그는 컨텐츠를 담는 컨테이너로서 쓰인다. 콘텐츠가 보일 영역을 구분하는 태그이다.
React.Fragment
React.Fragment는 컴포넌트가 새로운 노드를 추가하지 않고 여러 자식을 그룹화할 수 있게 해 준다.
공식 문서의 설명을 참고하면,
class Table extends React.Component {
render() {
return (
<table>
<tr>
<Columns />
</tr>
</table>
);
}
}
테이블 태그 아래 <Colums /> 컴포넌트는 여러 개의 <td /> 태그를 반환해주어야 한다.
하지만 일반적으로 React 컴포넌트는 1개의 자식만을 반환할 수 있기 때문에 다음과 예시처럼 <div> 태그와 같이 다른 태그로 감싸서 return 해주는 것이 일반적이다.
class Columns extends React.Component {
render() {
return (
<div>
<td>Hello</td>
<td>World</td>
</div>
);
}
}
하지만 이렇게 되면 <tr> 태그 아래에 <div> 태그가 포함되는 형태가 되기 때문에 적절한 형태라고 볼 수 없다.
이러한 형태를 유지하기 위해 React.Fragment를 사용한다.
React.Fragment의 축약 문법으로 <></>를 사용한다.
축약 문법(<></>)을 사용하는 경우 Fragments에 key를 사용할 수 없기 때문에 상황에 맞는 문법을 사용하는 것이 좋다.
결론
그럼 다시 돌아와서,
내가 궁금했던 것은 Atomic Design에서 원자화되어있는 UI를 조합하여 사용하는 경우에 어떤 태그를 사용하는 것이 적합 한가였다.
'Vue&React' 카테고리의 다른 글
Axios Interceptors 적용해보기 (3) | 2022.09.23 |
---|---|
[Vue.js] computed와 method (0) | 2022.09.02 |
[React] React Router의 state 속성 사용시 타입 이슈 (0) | 2022.08.06 |
[Vue.js] Sass 사용시 변수를 전역에서 사용하기 (0) | 2022.07.25 |
[React] Image Preloading (0) | 2022.07.15 |
- Total
- Today
- Yesterday
- 알고리즘
- React
- webpack
- redux-thunk
- clean code
- 문제풀이
- error
- Preloading
- SOAP API
- reactrouter
- js
- AxiosInterceptor
- v-for
- programmers
- 프로그래머스
- React.memo
- Vue.js
- TypeScript
- Transpiler
- python
- SPA
- 백준
- Repository Pattern
- Vuex
- redux
- 파이썬
- 상호평가
- GraphQL
- bundler
- Vue
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |