목차
2. 리스트가 따로 컴포넌트로 분리 됐을 경우에 map을 사용하는 법
3. find를 사용하여 렌더링 하기
4. 컴포넌트로 분리 됐을 경우에 find 사용하는 법
map과 find를 사용해서 데이터 리스트 렌더링을 해보자!
1. map을 사용하여 렌더링 하기
(1) 기본적인 마크업을 하고, 데이터 리스트를 작성한다.
List.jsx (페이지)
import "./List.css";
const List = () => {
const dummyList = [
{
id: 1,
title: "1번 게시글",
},
{
id: 2,
title: "2번 게시글",
},
{
id: 3,
title: "3번 게시글",
},
{
id: 4,
title: "4번 게시글",
},
{
id: 5,
title: "5번 게시글",
},
];
return (
<div>
</div>
);
};
export default List;
(2) map 메서드를 사용해서 리스트를 렌더링 한다.
List.jsx (페이지)
import "./List.css";
const List = () => {
const navigate = useNavigate();
const dummyList = [
{
id: 1,
title: "1번 게시글",
},
{
id: 2,
title: "2번 게시글",
},
{
id: 3,
title: "3번 게시글",
},
{
id: 4,
title: "4번 게시글",
},
{
id: 5,
title: "5번 게시글",
},
];
return (
<div>
<div className="list-container">
{dummyList.map((it) => (
<div key={it.id}>
<div className="list-box">{it.title}</div>
</div>
))}
</div>
</div>
);
};
export default List;
* 에러 ("Warning: Each child in a list should have a unique "key" prop.") 방지를 위해서 최상위 태그에 key={it.id} 를 추가해준다)
* it은 객체 각각을 의미하는 것으로, el 등등 다른 단어를 써도 무방하다.
* 데이터를 불러올 때는 {it.id} , {it.title}과 같이 it.(key) 형식으로 불러온다.
결과
2. 리스트가 따로 컴포넌트로 분리 됐을 경우에 map을 사용하는 법
(1) ListItem.jsx 컴포넌트를 생성해서 List.jsx에서 분리할 부분만 가져온다.
ListItem.jsx (컴포넌트)
import "./ListItem.css";
const ListItem = () => {
console.log();
return (
<div>
<div className="list-box"></div>
</div>
);
};
export default ListItem;
(2) List.jsx에서 ListItem.jsx 컴포넌트를 import해서 map 메서드 안에 적용한다.
List.jsx (페이지)
import "./List.css";
import ListItem from "../../components/ListItem/ListItem";
const List = () => {
const dummyList = [
{
id: 1,
title: "1번 게시글",
},
{
id: 2,
title: "2번 게시글",
},
{
id: 3,
title: "3번 게시글",
},
{
id: 4,
title: "4번 게시글",
},
{
id: 5,
title: "5번 게시글",
},
];
return (
<div>
<div className="list-container">
{dummyList.map((it) => {
return <ListItem key={it.id} {...it} />;
})}
</div>
</div>
);
};
export default List
* {...it} 스프레드 연산자를 통해 객체들을 전부 다 ListItem에게 props로 전달한다.
(3) ListItem.jsx에서 props로 받아온다.
ListItem.jsx (컴포넌트)
import "./ListItem.css";
const ListItem = (props) => {
console.log(props); // 콘솔에 찍어보기
return (
<div>
<div className="list-box"></div>
</div>
);
};
export default ListItem;
* console.log(props) 로 콘솔에 찍으면 다음과 같이 데이터를 잘 불러온다.
(4) ListItem.jsx에서 props로 받아온것을 렌더링 한다.
ListItem.jsx (컴포넌트)
import "./ListItem.css";
const ListItem = (props) => {
return (
<div>
<div className="list-box">{props.title}</div>
</div>
);
};
export default ListItem;
* props는 data 등등 다른 단어를 써도 무방하다.
* 렌더링 할때는 {props.title} 과 같이 props.(key) 형식으로 불러온다.
결과
3. find를 사용하여 렌더링 하기
(1) 기본적인 마크업을 하고, 데이터 리스트를 작성한다.
List.jsx (페이지)
import "./List.css";
const List = () => {
const dummyList = [
{
id: 1,
title: "1번 게시글",
},
{
id: 2,
title: "2번 게시글",
},
{
id: 3,
title: "3번 게시글",
},
{
id: 4,
title: "4번 게시글",
},
{
id: 5,
title: "5번 게시글",
},
];
return (
<div>
</div>
);
};
export default List;
(2) find 메서드를 사용해서 하나의 객체만 렌더링 한다.
List.jsx (페이지)
import "./List.css";
const List = () => {
const dummyList = [
{
id: 1,
title: "1번 게시글",
},
{
id: 2,
title: "2번 게시글",
},
{
id: 3,
title: "3번 게시글",
},
{
id: 4,
title: "4번 게시글",
},
{
id: 5,
title: "5번 게시글",
},
];
const targetData = dummyList.find((it) => parseInt(it.id) === parseInt(1));
console.log(targetData); // 콘솔에 찍어보기
return (
<div>
<div className="list-container">
<div className="list-box">{targetData.title}</div>
</div>
</div>
);
};
export default List;
* find 메서드를 통해 id가 1인 객체를 찾아서 targetData에 담는다.
* console.log(targetData)를 찍어보면 아래와 같이 id가 1인 객체가 뜬다.
결과
4. 따로 컴포넌트로 분리 됐을 경우에 find를 사용하는 법
(1) ListItem.jsx 컴포넌트를 생성해서 List.jsx에서 분리할 부분만 가져온다.
ListItem.jsx (컴포넌트)
import "./ListItem.css";
const ListItem = () => {
console.log();
return (
<div>
<div className="list-box"></div>
</div>
);
};
export default ListItem;
(2) List.jsx에서 ListItem.jsx 컴포넌트를 import한 다음, ListItem.jsx 컴포넌트에 props로 find 메서드로 찾은 데이터(targetData)를 전달한다.
List.jsx (페이지)
import ListItem from "../../components/ListItem/ListItem";
import "./List.css";
// import ListItem from "../../components/ListItem/ListItem";
const List = () => {
const dummyList = [
{
id: 1,
title: "1번 게시글",
},
{
id: 2,
title: "2번 게시글",
},
{
id: 3,
title: "3번 게시글",
},
{
id: 4,
title: "4번 게시글",
},
{
id: 5,
title: "5번 게시글",
},
];
const targetData = dummyList.find((it) => parseInt(it.id) === parseInt(1));
return (
<div>
<div className="list-container">
<ListItem key={targetData.id} {...targetData} /> // props로 targetData 전달하기
</div>
</div>
);
};
export default List;
(3) ListItem.jsx에서 props로 받아온것을 렌더링 한다.
ListItem.jsx (컴포넌트)
import "./ListItem.css";
const ListItem = (el) => {
return (
<div>
<div className="list-box">{el.title}</div>
</div>
);
};
export default ListItem;
결과
'Libraries > React' 카테고리의 다른 글
[React] Filter (2) 검색창, 검색어, 검색 필터 기능 구현 (검색창 만들기) (2) | 2023.12.28 |
---|---|
[React] props 완전 정복기 (props 개념 쉽게 이해하기) (0) | 2023.12.24 |
[React] 데이터 값에 따라 CSS 스타일 다르게 지정하기 (3) | 2023.12.21 |
[React] Routing (4) 리스트 페이지에서 게시글 클릭 시 상세 페이지 연결하기 (게시판 리스트 조회, useParams, useNavigate, Route, Routes, id 동적 라우팅) (0) | 2023.12.21 |
[React] 체크박스 (약관동의 만들기) (4) | 2023.11.28 |