React

jeongjwonยท2023๋…„ 3์›” 22์ผ
0

SEB FE

๋ชฉ๋ก ๋ณด๊ธฐ
25/56

๐Ÿ“Œ React

โœ… ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ JavaScript ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  1. ์„ ์–ธํ˜• Declarative
  • ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ๋ถ„์„ํ•˜์ง€ ์•Š์•„๋„ ์˜๋„๋ฅผ ๋ถ„๋ช…ํžˆ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
  • HTML/CSS/JS ๋กœ ๋‚˜๋ˆ„์–ด ์ ๊ธฐ ๋ณด๋‹ค๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ JSX(HTML + JavaScript) ํ™œ์šฉ
  1. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜
  • ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด๋†“์Œ
  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์„œ๋กœ ๋…๋ฆฝ์ ์ด๋กœ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ โžก๏ธ ๊ธฐ๋Šฅ ์ž์ฒด ์ง‘์ค‘, ์œ ์ง€๋ณด์ˆ˜์™€ ์œ ๋‹›ํ…Œ์ŠคํŠธ ์œ ์šฉ
  1. ๋ฒ”์šฉ์„ฑ Learn Once, Write Anywhere
  • ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€๋Š” ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋‚˜, React ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋””์—๋“  ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉ๋จ
  • Facebook ์—์„œ ๊ด€๋ฆฌ๋˜์–ด ์•ˆ์ •๋จ
  • 2020๋…„ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ํ”„๋ก ํŠธ์•ค๋“œ ๊ธฐ์ˆ 



๐Ÿ“Œ JSX

โœ… JavaScript XML ์˜ ์ค„์ž„๋ง๋กœ, ๋ฌธ์ž์—ด๋„ ์•„๋‹Œ HTML๋„ ์•„๋‹Œ JavaScript ๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•์œผ๋กœ React ์—์„œ UI ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” JavaScript ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ JavaScript ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜(์ปดํŒŒ์ผ)์‹œ์ผœ์ฃผ๋Š” Babel ์˜ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. ์ปดํŒŒ์ผ ํ›„, JavaScript ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ๊ณ  ํ™”๋ฉด์— ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. React ์—์„œ๋Š” CSS์™€ JSX ๋ฌธ๋ฒ•๋งŒ ๊ฐ€์ง€๊ณ  ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. JSX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JavaScript ๋งŒ์œผ๋กœ ๋งˆํฌ์—… ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ React DOM์— ๋ฐฐ์น˜ํ•˜๊ณ  , ํ•œ๋ˆˆ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. (DOM์—์„œ๋Š” inline ๋ฐฉ์‹์ด๋‚˜ script ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ js ํŒŒ์ผ ์—ฐ๊ฒฐ)

    JSX ๋ฅผ ๊ผญ ์“ฐ์ง€ ์•Š์•„๋„ React ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, JSX ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จํ•ด์ง€๋ฉด์„œ ๊ฐ€๋…์„ฑ์ด ๋†’์•„ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์žฅ์ ์ด ์žˆ๋‹ค.

  3. JSX ๊ทœ์น™

  • ํ•˜๋‚˜์˜ ์—˜๋ฆฌ๋จผํŠธ ์•ˆ์— ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ ์ž ํ•  ๋•Œ, ์ตœ์ƒ์œ„์—์„œ opening tag์™€ closing tag ๋กœ ๊ฐ์‹ธ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • React ์—์„œ css class ์†์„ฑ์„ ์ง€์ •ํ•˜๋ ค๋ฉด class ๋Œ€์‹  className ์œผ๋กœ ํ‘œ๊ธฐํ•ด์•ผํ•œ๋‹ค. class ๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด React ์—์„œ๋Š” ์ด๋ฅผ html ํด๋ž˜์Šค ์†์„ฑ ๋Œ€์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค๋กœ ๋ฐ›์•„๋“ค์ธ๋‹ค.
  • JSX ์—์„œ JavaScript ๋ฅผ ์“ฐ๊ณ ์ž ํ•œ๋‹ค๋ฉด, ๊ผญ ์ค‘๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ธ์‹ํ•œ๋‹ค.
  • React ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ JSX ๋กœ ์ž‘์„ฑ๋˜๋ฉด ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค. ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉด ์ผ๋ฐ˜์ ์ธ HTML ์—˜๋ฆฌ๋จผํŠธ๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•œ๋‹ค.
  • ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์€ if๋ฌธ์ด ์•„๋‹Œ ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ HTML ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ‘œ์‹œํ•  ๋•Œ๋Š” map() ํ•จ์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋“œ์‹œ key 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>
  );



๐Ÿ“Œ Component

โœ… ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ ๋ฌถ์Œ์œผ๋กœ UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•„์ˆ˜ ์š”์†Œ๋กœ
์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์กฐํ•ฉ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฆฌ์•กํŠธ์˜ ์‹ฌ์žฅ, ๋ชจ๋“  ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ตœ์†Œ ํ•œ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ง€๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๊ทผ์› root ์—ญํ• ์„ ํ•˜๊ณ  ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค๋ฅธ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ๊ด€๊ณ„๋ฅผ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ํ˜•์ƒํ™”ํ•˜์—ฌ ๊ณ„์ธต์  ๊ตฌ์กฐ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ ๊ธฐ๋Šฅ ๋ณ„๋กœ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ๊ถŒ์žฅํ•œ๋‹ค. ์ฆ‰,์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์˜์กด์„ฑ์ด ๋‚ฎ์•„์ง€๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค. ์›ํ•˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์— ๋งž์ถ”์–ด ์ปดํฌ๋„ŒํŠธ ์œ„์น˜๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    (๋ฐ˜๋ฉด, ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, Html๋กœ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๊ณ  css ์—์„œ ์Šคํƒ€์ผ ์†์„ฑ์„ ๊ณ ์น˜๊ณ  ๋ณ€๊ฒฝ๋œ ๊ตฌ์กฐ์™€ ์Šคํƒ€์ผ์— ๋งž์ถ”์–ด javascript ๊ฐ€ DOM ์„ ์กฐ์ž‘ํ•˜๊ฒŒ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.)



๐Ÿ“Œ Create React App

โœ… ๋ฆฌ์•กํŠธ SPA ๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ํˆด ์ฒด์ธ

npx create-react-app@lastest ํด๋”์ด๋ฆ„

0๊ฐœ์˜ ๋Œ“๊ธ€