안녕하세요
221013 메가박스 리액트 - 극장 공지사항 테이블(table) 본문
테이블 html 태그와 css를 정리합니다.
인라인 스타일의 문제점
- {} === {}는 false이기 때문에, 리렌더링시에 인라인 스타일이 적용된 컴포넌트 / 일반태그가 다르다고 판단하여 돔을 새로 그리게 되어 불피요한 리로딩이 발생
- style 속성의 재사용성이 떨어짐 [ 출처 ]
컬럼의 width에는 인라인 스타일을 적용하여 코드를 읽기 쉽게 하려고 했으나
리액트에서는 인라인스타일을 추천하지 않는다고 합니다.
하지만 인라인스타일을 함수로 만들어 전달을 하게되면 이 문제가 해결됩니다.
const Table = () => {
const colWidth = (px) => {
const style = {
width: `${px}px`,
};
return <col style={style}></col>;
};
테이블
- <table></table> 태그로 감싸는걸로 시작합니다.
- <caption></caption> 태그에는 테이블의 제목을 넣습니다.
브라우저에 렌더링되지 않도록 font-size : 0; 으로 스타일을 줍니다. - <colgroup></colgroup> 태그에는 열의 width를 적용시켜줍니다.
제목을 제외한 col에만 너비를 주어서 가장 긴 너비를 갖도록 합니다. - <thead></thead> 태그에는 테이블의 제목을 넣도록 합니다.
<tbody></tbody> 태그에는 테이블의 내용을 넣도록 합니다. - <tr></tr> 태그는 행을 만듭니다.
- <th></th> 태그는 <tr></tr> 태그 안에서 테이블의 제목을 의미합니다.
<td></td> 태그는 <tr></tr> 태그 안에서 테이블의 내용을 의미합니다.
<th>와 <td> 태그는 한 쌍입니다.
return (
<table className="board">
<caption>극장, 제목, 지역, 등록일</caption>
<colgroup>
{colWidth(150)}
<col></col>
{colWidth(150)}
{colWidth(120)}
</colgroup>
<thead>
<tr>
<th>극장</th>
<th>제목</th>
<th>지역</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td>코엑스</td>
<td className="title">
<Link to="#">[코엑스] 부티크 프라이빗 공사에 따른 이용 안내 (10/11~12월 중순)</Link>
</td>
<td>서울</td>
<td>2022.10.11</td>
</tr>
</tbody>
</table>
);
};
export default Table;
.board {
border-top: 1px solid #555;
caption {
font-size: 0;
}
thead {
tr {
text-align: center;
line-height: 45px;
background: #f2f4f5;
border-bottom: 1px solid #ddd;
th {
font-weight: 500;
}
}
}
tbody {
tr {
text-align: center;
line-height: 45px;
border-bottom: 1px solid #ddd;
.title {
text-align: start;
&:hover {
text-decoration: underline;
}
}
}
}
}
더미데이터를 만들어 html 구조로 렌더링합니다.
const theaterTable = [
{ id: 1, number: "1", place: "코엑스", title: " [코엑스] 부티크 프라이빗 공사에 따른 이용 안내 (10/11~12월 중순)", region: "서울", date: "2022.10.11", link: "#" },
{ id: 2, number: "2", place: "구미강동", title: "[구미강동] 10월 7일 건물정전으로 인한 상영중단 및 취소 안내", region: "부산/대구/경상 ", date: "2022.10.11", link: "#" },
{ id: 3, number: "3", place: "경북도청", title: " [경북도청] 전산시스템 점검 일정 안내 (10/4 화요일 오전 9시부터~)", region: "부산/대구/경상 ", date: "2022.09.28", link: "#" },
{ id: 4, number: "4", place: "대전현대아울렛", title: "[긴급] 대전현대아울렛 화재로 영화관 이용불가 안내", region: "대전/충청/세종 ", date: "2022.09.26", link: "#" },
{ id: 5, number: "5", place: "상암월드컵경기장", title: "[상암월드컵경기장] 22년 9월 27(화) 축구 국가대표 평가전 경기 당일 주차 안내", region: "서울", date: "2022.09.20", link: "#" },
];
<tbody>
{theaterTable.map((el) => {
return (
<tr>
<td className="numBody">{el.number}</td>
<td>{el.place}</td>
<td className="title">
<Link to={el.link}>{el.title}</Link>
</td>
<td>{el.region}</td>
<td>{el.date}</td>
</tr>
);
})}
</tbody>
</table>
'프론트엔드 국비교육 > 구현한 웹페이지' 카테고리의 다른 글
221018 메가박스 리액트 - 영화검색(2) TMBD 검색기능 구현 (0) | 2022.10.19 |
---|---|
221014 메가박스 리액트 - 영화검색(1) TMDB 데이터 받아오기 (0) | 2022.10.14 |
221012 메가박스 리액트 - 리스트 4개만 출력하기 (0) | 2022.10.12 |
8월11일60일차 - 웹코딩(프랜차이즈), flex-wrap, table (0) | 2022.08.11 |
8월04일55일차 - 웹코딩2(주얼리), 소소한 웹코딩 팁 8가지 (0) | 2022.08.07 |