class Table extends React.Component {
render() {
return (
<table>
<tr>
<Columns />
</tr>
</table>
);
}
}
렌더링 된 Table 컴포넌트가 유효하려면 <Columns />
가 여러 <td>
엘리먼트를 반환해야 한다.
class Columns extends React.Component {
render() {
return (
<div>
<td>Hello</td>
<td>World</td>
</div>
);
}
}
//---------------------------------------
그런데 위와 같이 <Columns />
가 <td />
를 <div>
로 감싸서 반환한다면 실제 dom tree는 아래와 같이 구성될것이다.
<table>
<tr>
<div>
<td>Hello</td>
<td>World</td>
</div>
</tr>
</table>
이렇게 구성된 html은 유효하지 않다.
class Columns extends React.Component {
render() {
return (
<React.Fragment>
<td>Hello</td>
<td>World</td>
</React.Fragment>
);
}
}
//---------------------------------------
<Columns />
가 <td />
를 <React.Fragment>
로 감싸서 반환한다면 Fragment는 dom에 추가되지 않기때문에 실제 dom tree는 아래와 같이 구성될것이다.
<table>
<tr>
<td>Hello</td>
<td>World</td>
</tr>
</table>
short syntax는 아래와 같이 빈 태그를 적어주는것인데
class Columns extends React.Component {
render() {
return (
<>
<td>Hello</td>
<td>World</td>
</>
);
}
}
이 방식을 사용하면 편리하기는 하지만 tag에 attributes나 key를 적어줄 수 없다.
그리고 현재 Fragment에 전달할 수 있는 유일한 어트리뷰트는 key이다. (공식문서에는 추후 이벤트 핸들러와 같은 추가적인 어트리뷰트를 지원할 수도 있다고 명시되어 있다.)
<div>
를 추가하게 되면 레이아웃을 유지하기 어려워지므로 fragment를 사용하면 된다.
설명을 좀 알게 쉽게 해놔라 그냥 react는 하나의 태그만 return 되는데 react.fragment는 두개 리턴 시켜준다. 이렇게 설명하면 쉽잖아. 자식아