반응형
Fragment
회사 홈페이지 유지보수를 하다가 가끔씩 보았던 녀석들이다.
그냥 의미없는 <>
와 같다고는 대충 추측을 했었다.
정확히는 어떤 의도로 만들었을까??
JSX가 JS로 변환되기 위해 리액트의 리턴문은 반드시 하나의 태그로 감싸져 있어야 한다.
이때 리액트가 작동하게 하기 위해 의미없는 <div>
태그를 작성함으로써 HTML의 의미를 깨뜨리곤 한다.
(정보의 의미가 강조되는 HTML 엘리먼트를 사용하면 자연스럽게 접근성이 강조된다.)
특히 목록 <ol>,<ul>
혹은 <table>
태그를 사용할때 문제가 나타난다.
이 경우 Fragment
를 사용하여 여러 엘리먼트를 하나로 묶어주는것이 권장된다.
import {Fragment} from 'react';
...
function Glossary(props) {
return (
<dl>
{props.items.map(item => (
// 나는 key를 넣기 위해, <div key = {item.id}>와 같이 적곤 했음..
<Fragment key={item.id}>
<dt>{item.term}</dt>
<dd>{item.description}</dd>
</Fragment>
))}
</dl>
);
}
만약 Fragment에 어떤 props도 필요하지 않다면 다음과 같이 짧게 줄여 쓸 수 있음.
function ListItem({ item }) {
return (
<>
<dt>{item.term}</dt>
<dd>{item.description}</dd>
</>
);
}
반응형
'개발 > React' 카테고리의 다른 글
try/catch : 렌더링중에 발생하지 않는 이벤트 핸들러에서의 에러처리 (0) | 2022.07.01 |
---|---|
JSX에서의 라벨링 (0) | 2022.06.30 |
index.html말고 헬멧 쓰는 이유 (0) | 2022.05.23 |
에러 : React Hook "useEffect" is called conditionally. React Hooks must be called in the exact same order in every component render. (0) | 2022.03.25 |
classnames 라이브러리 (0) | 2022.02.15 |