목록과 조건 렌더링

읽는 시간 약 8

이 문서에서 배우는 것

  • 배열을 마크업으로 바꾸는 방법
  • 키를 붙여야 하는 이유
  • 조건 렌더링에서 흔한 함정

목록 그리기

배열을 템플릿 배열로 바꿔 그대로 꽂으면 됩니다. 별도 반복 구문이 없습니다.

const items = [
  { id: 'a1', name: '무선 키보드' },
  { id: 'a2', name: '기계식 스위치' },
];

html`<ul>${items.map((it) => html`<li>${it.name}</li>`)}</ul>`;

목록이 자주 바뀐다면 keyed()로 각 항목에 안정적인 키를 붙이세요. 키가 있으면 런타임이 항목을 다시 만들지 않고 자리만 옮깁니다. 입력 포커스나 애니메이션 상태가 유지되는지가 여기서 갈립니다.

import { keyed } from 'loopkit';

html`<ul>${items.map((it) => keyed(it.id, html`<li>${it.name}</li>`))}</ul>`;

주의

배열 인덱스를 키로 쓰면 정렬이나 중간 삭제가 일어날 때 키가 서로 밀립니다. 서버가 준 식별자처럼 항목에 붙어 다니는 값을 쓰세요.

조건에 따라 다르게 그리기

삼항 연산자와 &&를 그대로 씁니다. 다만 &&의 왼쪽이 0이면 숫자 0이 화면에 찍히므로, 개수를 조건으로 쓸 때는 불리언으로 바꿔 주는 편이 안전합니다.

html`
  ${items.length > 0
    ? html`<ul>…</ul>`
    : html`<p class="empty">아직 담긴 항목이 없습니다.</p>`}
`;

요약

  • 배열은 map으로 템플릿 배열을 만들어 그대로 꽂는다.
  • 자주 바뀌는 목록은 keyed()로 안정적인 키를 준다.
  • &&의 왼쪽에는 숫자가 아니라 불리언을 둔다.