반응형
이번 포스팅에서는 React를 사용해서 리스트를 만들어보고자 한다.
우선 ReactDOM.render( )를 이용해 랜더링 할 <App /> component를 다음과 같이 만들어 놓고 시작하도록 하자.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script> <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> </head> <body> <div id="root"></div> <script type="text/babel"> class App extends React.Component { render() { return( <div> <!-- 리스트 컴포넌트를 넣을 공간 --> </div> ) } } ReactDOM.render( <App />, document.querySelector('#root') ) </script> </body> </html>
이제 랜더할 리스트 component를 만들어서 <App/> component 안에 집어 넣기만 하면 된다. 원래는 게시글 리스트 같은 것을 만들 때 데이터베이스와 통신해서 그 결과물을 가져와야 하지만 배열 형태의 더미 데이터를 state 객체 안에 담아놓고 리스트를 만들어 보도록 하겠다.
<script type="text/babel"> // List 컴포넌트 class List extends React.Component { state = { board: [ {id: 1, subject: 'first'}, {id: 2, subject: 'second'}, {id: 3, subject: 'third'}, {id: 4, subject: 'fourth'} ] // DB와 통신해서 받은 결과물이라 가정 } // Array 반복문 : forEach, filter, map, reduce list = this.state.board.map( (v, k) => { return ( <li key={k}> <span>{v.id}</span> <span>{v.subject}</span> </li> ) }) render() { return( <ul> {this.list} </ul> ) } } </script>
짚고 넘어가야할 포인트는 map 함수와 JSX 문법을 이용해 배열에 담긴 데이터를 <li></li> 엘리먼트 안에 넣어서 다시 배열로 만들었다는 것이다. 그렇게 반환된 배열을 <ul></ul> 안에 집어넣기만 하면 리스트가 만들어진다. 이 때 리스트의 각 항목에 "key"를 넣어야 하는데 key는 엘리먼트 리스트를 만들 때 포함해야 하는 특수한 문자열 속성이다.
key는 React가 어떤 항목을 변경, 추가 또는 삭제할지 식별하는 것을 돕는다. key 값은 리스트의 다른 항목들 사이에서 해당 항목을 고유하게 식별할 수 있는 문자열을 사용하는 것이 좋다. 대부분의 경우 데이터의 ID를 key로 사용하지만 랜더링 한 항목에 대해 안정적인 ID가 없다면 항목의 인덱스를 key로 사용할 수도 있다.
완성된 코드는 다음과 같다.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script> <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> </head> <body> <div id="root"></div> <script type="text/babel"> // List 컴포넌트 class List extends React.Component { state = { board: [ {id: 1, subject: 'ingoo'}, {id: 2, subject: 'ingoo'}, {id: 3, subject: 'ingoo'}, {id: 4, subject: 'ingoo'} ] // DB와 통신해서 받은 결과물이라 가정 } // Array 반복문 : forEach, filter, map, reduce list = this.state.board.map( (v, k) => { return ( <li key={k}> <span>{v.id}</span> <span>{v.subject}</span> </li> ) }) render() { return( <ul> {this.list} </ul> ) } } class App extends React.Component { render() { return( <div> <List /> </div> ) } } ReactDOM.render( <App />, document.querySelector('#root') ) </script> </body> </html>
반응형
'React' 카테고리의 다른 글
React - webpack.config.js (0) | 2022.04.20 |
---|---|
React - Webpack (0) | 2022.04.18 |
React - State 끌어올리기 (0) | 2022.04.17 |
React - Props & State (0) | 2022.04.14 |
React 기본 개념 (0) | 2022.04.12 |