리액트란, 다음과 같다.
리액트에서 렌더링이란, 내부 코드에 의해서 HTML에 마크업 언어로 주입이 되는 것이다. (즉, 화면에 보여주는 것이다.)
리액트의 동작원리는 다음과 같다.
리액트의 사용방법에 대해서는 공식페이지에서 확인할 수 있다.
먼저, 공식 문서의 사용 방법대로 터미널에 다음의 명령어들을 입력해보겠다.
npx create-react-app my-app
cd my-app
npm start
npx create-react-app my-app : 해당 폴더에 리액트환경을 구성한다.cd my-app : 해당 폴더로 터미널의 위치를 이동한다.npm start : 개발 서버를 시작한다.npx create-react-app my-app이라는 커맨드는 git init 또는 express-generator와 비슷한 느낌을 받았다.
어쨌든, 위 커맨드를 입력하면 해당 폴더에 react를 사용하기 위한 환경이 구축된다. (시간이 좀 걸린다.)
정상적으로 환경이 구축되었다면, 해당 리액트 폴더로 cd 명령을 통해 이동하고, npm start로 서버를 실행할 수 있다.
react는 typescript로 작성할 수 있도록 npx create-react-app my-app --template typescript 과 같은 형식으로도 명령어를 실행할 수도 있다.
todolist라는 폴더를 만들고, 위의 코드를 적용시켜보자.
todolist의 src폴더에는 확장자로 .tsx가 사용되었음을 확인할 수 있다.
이제 본격적으로, 리액트 폴더의 구조에 대해 알아보자.
먼저, todolist 폴더의 src > App.tsx 파일과, public > index.html 파일을 확인해보자. App.tsx에는 "App" 이라는 클래스를 가진 function이 하나 있고, index.html의 body부분에는 "root"라는 id를 가진 div 태그가 있다.
// src > App.tsx
function App() {
return (
<div className="App">
...
</div>
)
}
React에서 태그의 class 이름을 지정할 때, className을 사용하는 것을 주의하자.
<!-- public > index.html --->
...
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
그 다음, npm start를 실행했을 때 나오는 웹페이지에서, 개발자도구(크롬 기준 f12) > 요소 탭의 코드를 확인해보자.

위 사진을 보면, index.html 과 App.tsx 는 분리되어 있음에도, 하나의 html처럼 작성된 것을 확인할 수 있다.
즉, div 태그의 id인 root를 통해 접근을 하고 있는 것이다. 이것에 대한 내용은 src > index.tsx 파일에서 확인할 수 있다.
// src > index.tsx
import App from './App';
const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement
);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
이 코드를 통해 App이라는 컴포넌트를 호출하는 것이다.
먼저 이렇게 간단하게나마 리액트의 구조에 대해서 살펴보았는데, 리액트를 사용하기 위해서는 JSX라는 JavaScript + HTML 형식의 언어를 사용해야 한다. 이 JSX에 대해 알아보자.
먼저, 왜 JSX를 사용해야 하는지에 대해서 이해해보자.
React 라이브러리를 사용해서 JS로 구현한 코드와, JSX를 사용해서 구현한 코드를 비교해보자.
// JS > React 라이브러리 사용
function App(){
return React.createElement("div",null,"text");
}
// JSX 사용
function App(){
return (
<div>text</div>
);
}
위 코드를 살펴보면, 리액트에서 JSX를 사용하는 편이 가독성도 좋고, 편리하다는 것을 알 수 있다.
그럼 이제 본격적으로 JSX의 문법에 대해 알아보자.
function App() {
return (
<div className="App">
<h1>Title</h1>
<p>hello.</p>
</div>
);
} // OK
function App() {
return (
<div>
title0
</div>
<div className="App">
<h1>Title</h1>
<p>hello.</p>
</div>
);
} // Error - 부모 요소인 <div>이 병렬로 2개 사용됨.
class 선택자를 사용하려면, className 키워드를 사용한다.
JSX는 JS 코드가 사용 가능하며, 변수를 이용하려면 중괄호({ })를 이용한다.
function App() {
let myText = "text" ;
return (
<div >
<h1>Title</h1>
<p>{myText}</p> // 중괄호 이용
</div>
);
}
function App() {
let myText = "text";
return (
<div>
<h1>Title</h1>
<p>{myText === "text" ? <h1>"O"</h1> : <h1>"X"</h1>}</p> // "X" 가 필요없다면, `null` 사용
</div>
);
}
function App() {
let myText = undefined;
return (
<div>
{myText || "텍스트가 입력되지 않았습니다."}
</div>
);
}
<br> 태그처럼, HTML에서 닫는 태그가 필요없는 태그들도, JSX에서는 닫는 태그들이 필요하다.<br></br>
<br/> // 셀프 클로징 방법. <br></br>과 똑같음.
{/* */})를 이용한다. (vscode의 ctrl + /를 사용해도 된다.)function App() {
return (
<div> {/* 주석입니다. */}
text
</div>
);
}
JSX에서도, 기존 css와 마찬가지로 여러개의 스타일 방식을 정할 수 있다.
function App() {
const style = {
backgroundColor : 'black' , // camelCase로 작성해야함. `-` 가 들어가지 않음.
color : 'white',
fontSize : '20px',
fontWeight : 'bold',
padding : '20px'
}
return (
<div style = {style}> { /* 중괄호 이용 */}
text
</div>
);
}
import './App.css' ; // 외부 파일 불러오기
function App() {
return (
<div className = "container">
text
</div>
);
}
import styles from './App.module.css';
function App() {
return (
<div className={styles.container}>
text
</div>
);
}