키워드를 선택할 수 있는 리스트를 만든다.
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import React from 'react';
import Category from "./components/Category.js";
import './App.css';
function App() {
const category = [
{id: 1, title:"구성", sub:['연간', '월간', '주간', '일간']},
{id: 2, title:"기간", sub:['1년+', '1년', '6개월', '3개월', '1개월']},
{id: 3, title:"크기", sub:["A6-", "B6", "A5", "B5", "A4+"]},
{id: 4, title:"커버", sub:["하드커버", "소프트커버", "PVC"]},
{id: 5, title:"제본", sub:["양장", "6공", "스프링", "메모지"]},
{id: 6, title:"기타", sub:["타임라인", "체크리스트", "밴드", "가름끈", "모눈", "월간-주간-월간-주간", "월간전체-주간전체"]},
];
return (
<div className="App">
<Category data={category}></Category>
</div>
);
}
export default App;
|
cs |
최상위 App.js에서 category라는 array를 만들어 자료를 저장하고, 그 자료를 처리할 Category라는 Component를 생성한다. Category에 data={category} 형태로 props로 전달한다.
Category.js에서는 화면에 구현할 list를 만들어야 하는데 전달받은 props로 아래의 과정을 거쳐 만든다.
1. 먼저 sublist를 만들고
2. sublist를 넣은 list를 만든다.
1. sublists를 만든다
전달받은 category 는 id 1~6까지의 요소가 있으며, 그 안에 sub라는 항목이 존재한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
while(i < props.data.length){
const catData = props.data[i];
// 서브 리스트 구성하기
let j = 0;
let subLists = [];
while(j < catData.sub.length){
subLists.push(
<li key={i * 100 + j}>
<input type="checkbox" id={catData.sub[j]}>
</input>
<label htmlFor={catData.sub[j]}>{catData.sub[j]}</label>
</li>
)
j = j + 1;
}
|
cs |
i번째 데이터를 catData에 저장한다.
while문을 통해 그 안에 catData.sub를 하나씩 사용해 subLists를 만든다.
2. sublists를 넣은 list를 만든다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// 리스트 구성하기
const lists = [];
let i = 0;
while(i < props.data.length){
const catData = props.data[i];
// 1. subLists를 만든다
lists.push(
<div key={i * 100} className="mainCategory">
<h2 className="groupHeader">{catData.title}</h2>
<ul className="subCategory">
{subLists}
</ul>
</div>
);
i = i + 1;
}
|
cs |
Sublists의 li와 lists의 div 둘 다 key를 지정해주었다. key를 지정하지 않으면 react에서 자체적으로 오류메시지를 출력한다.
처음에는 li만 key를 지정해줘야 하는 줄 알았는데 오류메시지가 사라지지 않았다. push를 통해 list에 넣는 요소들에 key를 모두 지정해줘야 하는 것 같다.
Category.js의 전체 코드는 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import React from 'react';
import './Category.css';
function Category(props) {
// 리스트 구성하기
const lists = [];
let i = 0;
while(i < props.data.length){
const catData = props.data[i];
// 서브 리스트 구성하기
let j = 0;
let subLists = [];
while(j < catData.sub.length){
subLists.push(
<li key={i * 100 + j}>
<input type="checkbox" id={catData.sub[j]}>
</input>
<label htmlFor={catData.sub[j]}>{catData.sub[j]}</label>
</li>
)
j = j + 1;
}
lists.push(
<div key={i * 100} className="mainCategory">
<h2 className="groupHeader">{catData.title}</h2>
<ul className="subCategory">
{subLists}
</ul>
</div>
);
i = i + 1;
}
return (
<div className="category">
{lists}
</div>
);
}
export default Category;
|
cs |
출력된 화면
* 새롭게 알게 된 점
- push를 통해 리스트를 구성해 저장하는 경우, 태그(li, div)와 상관 없이 key를 지정해줘야 한다.
- push에는 하나의 최상위태그로 이뤄진 코드만 저장할 수 있다.
'React' 카테고리의 다른 글
React 오류 메시지 - exhaustive-deps-warning (0) | 2021.10.07 |
---|---|
React 오류 메시지 - checked without 'onChange' (0) | 2021.10.07 |
Create-react-app 설치 오류(npm WARN deprecated tar@2.2.2) (0) | 2021.09.30 |
다이어리 검색기 만들기 (1) (0) | 2021.09.30 |
생활코딩 React 강의 (10) - delete 구현 (0) | 2021.09.13 |