1. 개요
지금까지 JSX에 대한 이론을 간단하게 정리하였다. 이제 JSX 문법을 이용한 간단한 실습을 하고자 한다.
create-react-app 을 이용하여, react에 대한 기본적인 스켈레톤 코드를 받고 그 src 폴더 밑에 Chapter_03이라는 폴더를 하나 만든다. 그리고 위와 같이 Book.jsx 와 Library.jsx 파일을 하나씩 만들겠다.
2. Book.jsx
import React from "react";
function Book (props) {
return (
<div>
<h1>{`이 책의 이름은 ${props.name} 입니다.`}</h1>
<h2>{`이 책은 총 ${props.numOfPage}페이지로 이뤄져 있습니다.`}</h2>
</div>
);
}
export default Book;
코드에 대한 설명을 하겠다. Book이란 함수는 props를 인수로 받는다. props는 객체의 형태인 듯 하다. 밑에서 보면 점 표기법으로 props의 값들을 골라내서 사용하고 있다. 여기서 props는 Html 태그의 속성들을 묶어놓은 객체이다. 이 의미가 와닿지 않을 수 있는데, 밑에서 더 후술하겠다. 위의 코드는 default로 Book이라는 함수를 export(수출)하고 있다. 이렇게 수출하면, 프로젝트 내의 다른 jsx 파일에서 import(수입)하여 해당 함수를 사용할 수 있게 된다. 사용은 어떻게 할까? 다음 Library.jsx를 살펴 보며 이야기하자.
3. Library.jsx
import React from "react";
import Book from "./Book";
function Library(props) {
return (
<div>
<Book name="처음 만난 파이썬" numOfPage={300}/>
<Book name="처음 만난 AWS" numOfPage={400}/>
<Book name="처음 만난 리액트" numOfPage={500}/>
</div>
)
}
export default Library;
Library라는 함수는 Book이란 함수를 수입하여 사용하고 있다. 잘 보면 Book의 속성으로 name과 numOfPage를 정의하고 해당 속성들에 값 또한 정의해놓았다. 감이 좀 오는가? 저렇게 Book이란 태그에서 속성 = "값" 형태로 기술해놓으면 Props라는 객체에 속성: 값 형태로 정의 되어 들어가게 되고, 그것을 Book 내부 함수에서 사용할 수 있는 것이다. 그림으로 표현하면 다음과 같다.
이제 해당 Library를 루트인 index.jsx까지 전달하여 사용하고 화면에 띄워보자.
4. Index.jsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import Library from './chapter_03/Library';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<Library />
</React.StrictMode>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
원래 React.StrictMode 태그 사이에 <app /> 이 있었는데, 이를 Library 태그로 교체 했다. 이렇게 하고 실행하면, 화면은 다음과 같이 뜬다.
'프론트엔드 개발 > React - 이론' 카테고리의 다른 글
React 랜더링 과정에 대한 실습 (0) | 2024.01.14 |
---|---|
React의 랜더링 원리와 과정 (0) | 2024.01.14 |
ReactElement란 무엇인가 (0) | 2024.01.13 |
JSX의 장점 및 사용법 (0) | 2024.01.13 |
JSX의 정의와 원리에 대하여 (0) | 2024.01.13 |