여러 엘리먼트를 작성하고자 하는 경우, 최상위에서 opening 태그와 closing 태그로 감싸줘야 한다.
React가 사용하는 Virtual DOM 방식에서는 컴포넌트 변화를 감지할 때 효율적으로 비교하고자 컴포넌트 내부는 하나의 DOM 트리 구조로 이루어져야 한다
라는 규칙이 있기 때문이다.
React.Fragment
<React.Fragment></React.Fragment>
태그를 사용하면DOM
에 의미없는 태그(div
)를 사용하지 않고 여러 하위 노드들을 그룹화해서 사용할 수 있다.
<></>
와 같이 단축해서 쓸 수도 있다. 다만, 단축해서 쓸 경우key
값을 설정할 수 없다.
className
으로 작성해줘야 한다. 만약 원래대로 class라고 작성할 경우 React에서는 이를 html 클랙스 속성 대신 자바스크립트 클래스로 인식한다.{}
)를 써야한다. 중괄호가 없으면 일반 텍스트로 인식한다.React에서 여러 개의 HTML 엘리먼트를 표시할 때는 map()
함수를 사용한다. map()
함수를 사용할 때는 반드시 'key' JSX 속성을 넣어야 한다. 'key' JSX 속성을 넣지 않으면 리스트의 각 항목에 key를 넣어야 한다는 경고가 표시된다.
key 속성값은 가능하면 데이터에서 제공하는 id를 할당해야 한다. key 속성값은 id와 마찬가지로 변하지 않고, 예상 가능하며, 유일해야 하기 때문이다. 정 고유한 id가 없는 경우에만 배열 인덱스를 넣어서 해결할 수 있지만, 배열 인덱스는 최후의 수단(as a last resort)으로만 사용해야한다.
const posts = [
{ id: 1, title: "Hello World", content: "Welcome to learning React!" },
{ id: 2, title: "Installation", content: "You can install React via npm." },
];
// map 메서드를 변수로 추출한 방법
function Blog() {
const postToElement = (post) => (
<div>
<h3>{post.title}</h3>
<p>{post.content}</p>
</div>
);
const blogs = posts.map(postToElement);
return <div className="post-wrapper">{blogs}</div>;
}
// map 메서드를 return문 안에 인라인으로 처리한 방법
function Blog() {
const blogs = posts.map((post) => (
<div key={post.id}>
<h3>{post.title}</h3>
<p>{post.content}</p>
</div>
));
return <div className="post-wrapper">{blogs}</div>;
}