๊ฐ์๋ฅผ ๋ฃ๊ฑฐ๋ ํผ์ ํ ์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๋, ์๋ฌด ์๊ฐ ์์ด ์ต๊ด์ ์ผ๋ก CRA(Create React App)๋ฅผ ํตํด ๊ฐ๋ฐ์ ์์ํ๋ค๋ณด๋ ๋ฆฌ์กํธ๊ฐ ๋์ํ๋ ๊ธฐ๋ณธ์ ์ธ ์๋ฆฌ๋ฅผ ์ง๋์น๊ฒ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. CRA ์์ด index.html์ ๋ฆฌ์กํธ๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
์ฐ์ ๋๋ถ๋ถ์ ์ค์ ์ ๋ฆฌ์กํธ ๊ณต์๋ฌธ์์ ๋์์์ผ๋ฏ๋ก ๊ณต์ ๋ฌธ์๋ง ๋ฐ๋ผํด๋ ์ ์๋ํ ๊ฒ์ ๋๋ค. ์ ๋ ์ ๊ฐ ๋ณด๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌ๋ฅผ ํ๊ณ ์ถ์ด์ ๋ธ๋ก๊ทธ์ ์ ๊ณ ์์ต๋๋ค๐
https://ko.reactjs.org/docs/add-react-to-a-website.html
1. <body> ํ๊ทธ ์์ ๋น์ด์๋ <div> ํ๊ทธ ํ๋ ๋ง๋ค๊ธฐ
์์ฑํ ์ปดํฌ๋ํธ๋ค์ด ๋ณด์ฌ์ง ๋น์ด์๋ ํ๊ทธ๋ฅผ ํ๋ ๋ง๋ญ๋๋ค. ์ด๋ <div>ํ๊ทธ์ id๋ฅผ ๋ถ์ฌํด์ค๋๋ค. id๋ฅผ ๋ถ์ฌํ๋ ์ด์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ id๋ฅผ ํตํด ํด๋น <div> ํ๊ทธ๋ฅผ ์ฐพ์์ ๊ทธ ์์ React ์ปดํฌ๋ํธ๋ฅผ ํ์ํ ์ ์๊ฒ ํ๊ธฐ ์ํด์์ ๋๋ค. id ์ด๋ฆ์ ์ด๋ป๊ฒ ์ง์ด๋ ์๊ด์์ต๋๋ค.
2. ๋ฆฌ์กํธ๋ฅผ ์คํํ๋ <script> ํ๊ทธ ์ถ๊ฐํ๊ธฐ
<body> ํ๊ทธ ์์ ๋ค์๊ณผ ๊ฐ์ <script> ํ๊ทธ 2๊ฐ๋ฅผ ์ฝ์ ํฉ๋๋ค. ํด๋น ์ฝ๋๋ ๊ณต์ ๋ฌธ์์ ๋์์๊ณ , ๊ณต์ ๋ฌธ์์๋ ์๊น ๋ง๋ <div> ํ๊ทธ ์์ ์์นํ๊ณ ์์ด์ ๊ทธ๋๋ก ๋ณต๋ถํ์ต๋๋ค.
<script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin></script>
3. ๋ฐ๋ฒจ์ ์คํํ๋ <script> ํ๊ทธ ์ถ๊ฐํ๊ธฐ
๋ฆฌ์กํธ์์๋ JSX๋ผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฅ ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. JSX๋ html์ ํ๊ทธ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํํ์(๊ฐ์ผ๋ก ํ๊ฐ๋ ์ ์๋ ๊ตฌ๋ฌธ)์ ๊ฐ์ด ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ ๋๋ค. (๋งํฌ) ๊ทธ๋ฐ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ JSX๋ฅผ ํด์ํ ์ ์์ต๋๋ค. ๊ทธ๋์ ๋ฐ๋ฒจ(babel) ์ด๋ผ๋ ์ปดํ์ผ๋ฌ๋ก JSX๋ฅผ ํด์ํด ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ก ์ฌ์์ฑํด์ค๋๋ค. ๋ฐ๋ฒจ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์์ ๊ฐ์ด <script> ํ๊ทธ๋ก ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
๋ฐ๋ฒจ์ ์ฌ์ฉํ๋ <script> ํ๊ทธ๋ฅผ ์ถ๊ฐํ๊ณ ๋์, html ํ์ผ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ฒ๋ผ <script> ํ๊ทธ ์์์ ์ค์ ๋ก ์ฝ๋ฉ์ ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ ์ ์, ์ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋<script> ํ๊ทธ์ ๋ค์๊ณผ ๊ฐ์ด type ์์ฑ์ ์ค์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
<script type="text/babel">
4. <div> ํ๊ทธ๋ฅผ ์ฐพ๋ ์ฝ๋์ ReactDOM ํจ์๋ฅผ ์คํํ ์ฝ๋ ๋ฃ๊ธฐ
๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ <script> ํ๊ทธ ๋งจ ์๋์ ๋ฆฌ์กํธ๋ฅผ ์๋์ํค๋ ์ฝ๋ ๋ ์ค์ ์์ฑํฉ๋๋ค. ํ๋๋ <body> ํ๊ทธ ์ต์๋จ์ id๋ฅผ ๋ถ์ฌํ ์ปจํ ์ด๋ <div> ํ๊ทธ๋ฅผ ์ฐพ๋ ์ฝ๋์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ๋ฆฌ์กํธ์ ํน์ง์ธ Virtual DOM์ ์์ฑํ๋ ํจ์๋ฅผ ์คํํ๋ ์ฝ๋์ ๋๋ค. ๋ฆฌ์กํธ์ Virtual DOM๊ณผ ์๋ ๋ฐฉ์์ ์ด ๊ธ์ ์์ธํ๊ณ ์ ํํ๊ฒ ์ค๋ช ๋์ด ์์ต๋๋ค.
const ์ฌ๊ธฐ๋ค๊ฐ๊ทธ๋ ค = document.querySelector("#์์ด๋ ์ด๋ฆ");
ReactDOM.render(์ปดํฌ๋ํธ๋ฅผ, ์ฌ๊ธฐ๋ค๊ฐ๊ทธ๋ ค);
document.querySelector ๋ผ๋ API๋ฅผ ํตํด <div> ํ๊ทธ์ id๋ฅผ ์ฐพ๊ณ , ReactDOM.render ๋ผ๋ ๋ฆฌ์กํธ ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ReactDOM.render ํจ์๋ ์ฒซ ๋ฒ์งธ parameter๋ก ๋ ๋๋งํ ์ปดํฌ๋ํธ๋ค์ ๋ด๊ณ ์๋ ์ต์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ฅผ ๋ฐ๊ณ , ๋ ๋ฒ์งธ parameter๋ก <body> ํ๊ทธ ์์ ์๋ ์ปจํ ์ด๋ <div> ํ๊ทธ๋ฅผ ์ ์ํ ๋ณ์๋ฅผ ๋ฐ์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฆฌ์กํธ์ ์๋ ๋ฐฉ์์ ๋ฐ๋ผ ์์ฑํ ์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ๊ทธ๋ ค์ค๋๋ค.
'๐งโ๐ป๊ฐ๋ฐ_Deep Dive > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
antd์ styled-components ๊ฐ๋จ ์ ์ฉ (0) | 2022.02.08 |
---|---|
[๋ฆฌ์กํธ] ์ปดํฌ๋ํธ์ props ~ ์ํ ๋์ด์ฌ๋ฆฌ๊ธฐ (0) | 2022.02.03 |
[๋ฆฌ์กํธ]styled-components (0) | 2021.12.26 |