๐Ÿง‘‍๐Ÿ’ป Web/React

[React] React ๊ธฐ๋ณธ - CRA

Lennon 2022. 4. 12. 23:11
728x90
๋ฐ˜์‘ํ˜•

์†Œ๋งˆ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๋ฉฐ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์•„์ง ๋ฆฌ์•กํŠธ๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ ์˜ˆ๋น„ ๊ณผ์ • ๋™์•ˆ React๋กœ ์›ํ•˜๋Š” ๊ฑธ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ๋งŒ ํ•™์Šตํ•˜๊ณ , ์ดํ›„ ๋ณธ ๊ณผ์ •์—์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ๊นŠ์ด ์žˆ๊ฒŒ ์ ์šฉ ๋ฐ ํ•™์Šตํ•  ์˜ˆ์ •์ด๋‹ค. 1๋‹ฌ ๋ฐ˜ ๋™์•ˆ ๋งค์ผ๋งค์ผ ํ•™์Šตํ•˜๋ฉฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์ž

 

 

React๋ž€?

๋ฆฌ์•กํŠธ๋Š” JS๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ์ด๋ฒคํŠธ๊ฐ€ ๋‹ค์–‘ํ•ด์ง€๊ณ , DOM๋„ ๋‹ค์–‘ํ•ด์ง€๊ฒŒ ๋˜๋ฉด ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋Š” ๊ทœ์น™๋„ ๋งŽ์ด ๋ณต์žกํ•œ ๊ธฐ์กด ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์„ ์™„์ „ํžˆ ๋ฐ”๊พธ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ๋ฆฌ์•กํŠธ๋Š” ์–ด๋– ํ•œ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ, DOM์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์•„์˜ˆ ๋‹ค ๋‚ ๋ฆฌ๊ณ , ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ๊ฑธ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ณด์—ฌ์ค€๋‹ค๋Š” ์•„์ด๋””์–ด์—์„œ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.

 

๋‹ค ๋‚ ๋ฆฌ๊ณ  ์ƒˆ๋กœ ๋งŒ๋“ค๋ฉด ๋Š๋ฆฌ์ง€ ์•Š์„๊นŒ? 

๋ฆฌ์•กํŠธ๋Š” Virtual DOM์„ ์ด์šฉํ•ด ์†๋„๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๊ฐ€์ƒ์˜ DOM ์ด๋ฉฐ JavaScript ๊ฐ์ฒด์ด๋ฏ€๋กœ ์†๋„๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅด๋‹ค!

์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ณณ์˜ UI๋ฅผ Virtual DOM์„ ์ด์šฉํ•ด ๋ Œ๋”๋งํ•œ๋‹ค. 

 

๐Ÿ”ฅ ๋ฆฌ์•กํŠธ๋Š” ์ƒํƒœ ๋ณ€ํ™”์‹œ ์–ด๋–ป๊ฒŒ DOM์„ ์—…๋ฐ์ดํŠธ ํ•˜์ง€?! ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ ์—†์ด ๋น ๋ฅธ ์„ฑ๋Šฅ์œผ๋กœ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ๋ฒ„๋ฆฐ๋‹ค!

 

 

CRA

npx create-react-app (ํ”„๋กœ์ ํŠธ ๋„ค์ž„)

CRA๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ฒ˜์Œ์— ์œ„ ๋””๋ ‰ํ† ๋ฆฌ ์ฒ˜๋Ÿผ ๊ตฌ์„ฑ๋˜์–ด์žˆ์„ ๊ฒƒ์ด๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ธฐ์กด ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•„์š” ์—†๋Š” ๊ฑด ์‚ญ์ œํ•ด์ฃผ์ž

// App.js

function App() {
  return <div className='App'>
  	<h1>Hello REACT!</h1>
  </div>;
}

export default App;
// index.js
// react์—์„œ ํ™”๋ฉด์— renderํ•˜๋Š” ํŒŒ์ผ
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

srcํด๋”์˜ App.js, index.js๋ฅผ ์ผ๋‹จ ์œ„์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์ฃผ์ž.(cssํŒŒ์ผ ๋ฐ icon ๋“ฑ์ด ์—ฐ๋™๋˜์–ด ์žˆ์–ด ์‚ญ์ œํ–ˆ์œผ๋‹ˆ ์—ฐ๋™ ํ•ด์ œ)

index.js์—์„œ ReactDOM์„ ๋žœ๋”๋ง ํ•œ๋‹ค๋Š” ๊ฑธ ๋ณด๋‹ˆ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ™”๋ฉด์„ ๋„์–ด์ฃผ๋Š” ๊ฒƒ์ด๊ณ , StrictMode๋กœ App ์ปดํฌ๋„ŒํŠธ๋ฅผ id๊ฐ’์ด root์ธ ๊ณณ์— ๋žœ๋”๋ง ํ•œ๋‹ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ž ๊น ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

๋ฆฌ์•กํŠธ๋Š” style, view ๋“ฑ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด import, export๋ฅผ ํ†ตํ•ด moduleํ™” ํ•˜์—ฌ ์กฐ๋ฆฝํ•ด์„œ ๋งŒ๋“ ๋‹ค.

์ด๋Š” ๋ฆฌ์•กํŠธ์˜ ๊ฐ•๋ ฅํ•œ ์žฅ์ ์ด๋ฉฐ, ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ–ฅ์ƒ๋œ๋‹ค.

๋˜ํ•œ ๐Ÿ”ฅ์ปดํฌ๋„ŒํŠธ์˜ ์ฒซ ๋ฌธ์ž๋Š” ๊ผญ ๋Œ€๋ฌธ์ž์—ฌ์•ผ ํ•œ๋‹ค!

 

๋‹ค์‹œ ๋Œ์•„์™€์„œ id๊ฐ’์ด root์ธ ํƒœ๊ทธ๊ฐ€ ์–ด๋””์žˆ์„๊นŒ?

public์˜ index.html ํŒŒ์ผ๋กœ ๊ฐ€๋ณด์ž.

31๋ฒˆ์งธ ์ค„์ด id๊ฐ’์ด root์ธ div ํƒœ๊ทธ๊ฐ€ ๋ณด์ธ๋‹ค. ์ € ๋ถ€๋ถ„์— render๋ฅผ ํ•ด์„œ ํ™”๋ฉด์— ํ‘œ์‹œํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

์›๋ฆฌ๋ฅผ ๋Œ€์ถฉ ์•Œ์•˜์œผ๋‹ˆ ํ„ฐ๋ฏธ๋„์—์„œ ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ ํ›„

npm run start

๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž!

 

๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ๋ฐ˜๊ฒจ์ค„ ๊ฒƒ์ด๋‹ค. ๋‹ค์Œ์€ JSX๋ฌธ๋ฒ•๊ณผ useState, Form ์ œ์–ด ๋“ฑ์„ ํ•™์Šตํ•ด๋ณด์ž!

728x90
๋ฐ˜์‘ํ˜•