โ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ํ JavaScript ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โ JavaScript XML ์ ์ค์๋ง๋ก, ๋ฌธ์์ด๋ ์๋ HTML๋ ์๋ JavaScript ๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ์ผ๋ก React ์์ UI ๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ๋ก ์คํํ ์ ์๋ JavaScript ์ฝ๋๊ฐ ์๋๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๊ฒ JavaScript ์ฝ๋๋ก ๋ณํ(์ปดํ์ผ)์์ผ์ฃผ๋ Babel ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ์ปดํ์ผ ํ, JavaScript ๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ๊ณ ํ๋ฉด์ ๋ ๋๋ง ํ ์ ์๋ค.
React ์์๋ CSS์ JSX ๋ฌธ๋ฒ๋ง ๊ฐ์ง๊ณ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค. JSX๋ฅผ ์ฌ์ฉํ๋ฉด JavaScript ๋ง์ผ๋ก ๋งํฌ์
ํํ์ ์ฝ๋๋ฅผ ์์ฑํ์ฌ React DOM์ ๋ฐฐ์นํ๊ณ , ํ๋์ ์ปดํฌ๋ํธ๋ฅผ ํ์ธํ ์ ์๋ค. (DOM์์๋ inline ๋ฐฉ์์ด๋ script ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ js ํ์ผ ์ฐ๊ฒฐ)
JSX ๋ฅผ ๊ผญ ์ฐ์ง ์์๋ React ์์๋ฅผ ์์ฑํ ์ ์์ง๋ง, JSX ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ฝ๋๊ฐ ๊ฐ๋จํด์ง๋ฉด์ ๊ฐ๋
์ฑ์ด ๋์ ์ดํดํ๊ธฐ ์ฌ์ด ์ฅ์ ์ด ์๋ค.
JSX ๊ท์น
//index.js
import { StrictMode } from "react";
import ReactDOM from "react-dom";
import App from "./App";
const rootElement = document.getElementById("root");
ReactDOM.render(
<StrictMode>
<App />
</StrictMode>,
rootElement
);
//App.js
const posts = [
{ id: 1, title: "Hello World", content: "Welcome to learning React" },
{ id: 2, title: "Installation", content: "You can install React from npm" }, ...
];
export default function App() {
// ํ ํฌ์คํธ์ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด post๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ณ
// obj๋ฅผ JSX ํํ์์ผ๋ก ๋ฐ๊ฟ ๋ฆฌํดํด์ฃผ๋ ํจ์ postToJSX
const postToJSX = (post) => {
return (
<div key={post.id}>
<h3>{post.title}</h3>
<p>{post.content}</p>
</div>
);
};
return (
<div className="App">
{posts.map(postToJSX)};
// javascript ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด {} ์ค๊ดํธ ์ด์ฉ
// ๋ง์ ๋ฐ์ดํฐ๋ค์ ๊ตฌํํ๊ณ ์ ํ ๋
// ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ํน์ ๋
ผ๋ฆฌ์ ์ํด ๋ค๋ฅธ ์์๋ก ์ง์ ํ๋ map ๋ฉ์๋ ์ด์ฉ
//{posts.map(el => postToJSX(el))};
</div>
);
โ
ํ๋์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ํ ์ฌ๋ฌ ์ข
๋ฅ์ ์ฝ๋ ๋ฌถ์์ผ๋ก UI๋ฅผ ๊ตฌ์ฑํ๋ ํ์ ์์๋ก
์ฌ๋ฌ ์ปดํฌ๋ํธ๋ค์ ์กฐํฉ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
๋ง๋ค ์ ์๋ค.
๋ฆฌ์กํธ์ ์ฌ์ฅ, ๋ชจ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ์ ์ผ๋ก๋ ๊ทผ์ root ์ญํ ์ ํ๊ณ ์ต์์ ์ปดํฌ๋ํธ๋ ๋ค๋ฅธ ์์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ปดํฌ๋ํธ๋ค์ ๊ด๊ณ๋ฅผ ํธ๋ฆฌ๊ตฌ์กฐ๋ก ํ์ํํ์ฌ ๊ณ์ธต์ ๊ตฌ์กฐ๋ก ๋ํ๋ผ ์ ์๋ค.
๊ฐ ๊ธฐ๋ฅ ๋ณ๋ก ํ๋์ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋๋ก ๊ถ์ฅํ๋ค. ์ฆ,์ปดํฌ๋ํธ ๊ฐ์ ์์กด์ฑ์ด ๋ฎ์์ง๊ณ ๋
๋ฆฝ์ ์ผ๋ก ์๋ํ๋ค. ์ํ๋ ์์ ์ฌํญ์ ๋ง์ถ์ด ์ปดํฌ๋ํธ ์์น๋ง ์์ ํด์ฃผ๊ฑฐ๋ ์ฌ์ฌ์ฉํ ์ ์๋ค.
(๋ฐ๋ฉด, ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด, Html๋ก ๊ตฌ์กฐ๋ฅผ ๋ฐ๊พธ๊ณ css ์์ ์คํ์ผ ์์ฑ์ ๊ณ ์น๊ณ ๋ณ๊ฒฝ๋ ๊ตฌ์กฐ์ ์คํ์ผ์ ๋ง์ถ์ด javascript ๊ฐ DOM ์ ์กฐ์ํ๊ฒ ์์ ํด์ค์ผ ํ๋ค.)
โ ๋ฆฌ์กํธ SPA ๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ๋ง๋ค์ด์ง ํด ์ฒด์ธ
npx create-react-app@lastest ํด๋์ด๋ฆ