[React] JSX

๊ฐ•์€๋น„ยท2022๋…„ 1์›” 10์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
2/36
post-custom-banner

react ์Šคํ„ฐ๋””์—์„œ ๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ ์ด๋ผ๋Š” ์ฑ…์„ ์„ ์ •ํ–ˆ๊ณ  ์ด ์ฑ…์„ ์ฝ๊ณ  ๋ฐฐ์šด ๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค.


๐Ÿ“Œ JSX๋ž€?

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ™•์žฅ ๋ฌธ๋ฒ•์œผ๋กœ, React Element๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • JSX ์ฝ”๋“œ๋Š” ๋ฒˆ๋“ค๋ง ๊ณผ์ •์—์„œ Babel์„ ํ†ตํ•ด ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
function App(){
    return (
        <div>
          Hello react
        </div>
    );
}
//์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€ํ™˜
function App(){
    return React.createElement("div", null, "Hello react");
}

๐Ÿ“Œ JSX์˜ ์žฅ์ 

  1. ๋ณด๊ธฐ ์‰ฝ๊ณ  ์ต์ˆ™ํ•˜๋‹ค.
  • ์œ„ ์ฝ”๋“œ์—์„œ JSX ์ฝ”๋“œ์™€ ๋ฐ”๋ฒจ์„ ํ†ตํ•ด ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ JSX ์ฝ”๋“œ๊ฐ€ ๊ฐ€๋…์„ฑ์ด ๋†’๊ณ  ์ž‘์„ฑํ•˜๊ธฐ๋„ ์‰ฝ๊ฒŒ ๋Š๊ปด์ง„๋‹ค. (HTML ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ด์„œ)
  1. ๋”์šฑ ๋†’์€ ํ™œ์šฉ๋„
  • JSX์—์„œ๋Š” HTML ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ปดํฌ๋„ŒํŠธ๋„ JSX ์•ˆ์—์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
ReactDOM.render(
    <React.StrictMode>
        <App/>
    </React.StrictMode>,
    document.getElementbyId("root)
);
  • ReactDOM.render()
    • ์ปดํฌ๋„ŒํŠธ๋ฅผ ํŽ˜์ด์ง€์— ๋ Œ๋”๋งํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, react-dom ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ํŽ˜์ด์ง€์— ๋ Œ๋”๋งํ•  ๋‚ด์šฉ์„ JSX ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ํ•ด๋‹น JSX๋ฅผ ๋ Œ๋”๋งํ•  document์˜ ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

๐Ÿ“Œ JSX ๋ฌธ๋ฒ•

  • ์ปดํฌ๋„ŒํŠธ์— ์—ฌ๋Ÿฌ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ์š”์†Œ๋กœ ๊ฐ์‹ธ์•ผ ํ•œ๋‹ค.
    • Virtual DOM์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•ด ๋‚ผ ๋•Œ ํšจ์œจ์ ์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€๋Š” ํ•˜๋‚˜์˜ DOM ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค.
    • Fragment ๊ธฐ๋Šฅ, <> </>
  • JSX ์•ˆ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด JSX ๋‚ด๋ถ€์—์„œ ์ฝ”๋“œ๋ฅผ {}๋กœ ๊ฐ์‹ธ๋ฉด ๋œ๋‹ค.
  • JSX ๋‚ด๋ถ€์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹์—์„œ๋Š” if๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , ๋Œ€์‹  ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • AND ์—ฐ์‚ฐ์ž (&&)๋ฅผ ์‚ฌ์šฉํ•œ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง
    • JavaScript์—์„œ true && expression์€ expression์œผ๋กœ ํ‰๊ฐ€๋˜๊ณ  false && expression์€ false๋กœ ํ‰๊ฐ€๋œ๋‹ค.
    • null๊ณผ false๋ฅผ ๋ Œ๋”๋งํ•˜๋ฉด ํ™”๋ฉด์— ์•„๋ฌด๊ฒƒ๋„ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค. (falsyํ•œ ๊ฐ’์ธ 0์€ ์˜ˆ์™ธ)
function App() {
    const name = "๋ฆฌ์•กํŠธ";
    return (
        <div>{name === "๋ฆฌ์•กํŠธ" ? <h1>๋ฆฌ์•กํŠธ์ž…๋‹ˆ๋‹ค</h1> : null}</div>
    );
}
// ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋ƒ„
function App() {
    const name = "๋ฆฌ์•กํŠธ";
    return (
        <div>{name === "๋ฆฌ์•กํŠธ" && <h1>๋ฆฌ์•กํŠธ์ž…๋‹ˆ๋‹ค</h1>}</div>
    );
}
  • undefined ๋ Œ๋”๋งํ•˜์ง€ ์•Š๊ธฐ (์˜ค๋ฅ˜ ๋ฐœ์ƒ)
    • OR ์—ฐ์‚ฐ์ž(||)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ๊ฐ’์ด undefined์ผ ๋•Œ ์‚ฌ์šฉํ•  ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ˜๋ฉด, JSX ๋‚ด๋ถ€์—์„œ undefined๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ๋‹ค.
// ์˜ค๋ฅ˜ ๋ฐœ์ƒ
function App(){
    const name = undefined;
    return name;
}

// OR ์—ฐ์‚ฐ์ž ์ด์šฉ
function App(){
    const name = undefined;
    return name || "๊ฐ’์ด undefined์ž…๋‹ˆ๋‹ค.";
}

// JSX ๋‚ด๋ถ€์˜ undefined (์˜ค๋ฅ˜ ๋ฐœ์ƒ x)
function App(){
    const name = undefined;
    return (
       <div>{name}</div>
    );
}

// undefined์ผ ๋•Œ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์€ ๋ฌธ๊ตฌ
function App(){
    const name = undefined;
    return (
       <div>{name || "๋ฆฌ์•กํŠธ"}</div>
    );
}
  • JSX์—์„œ ์ธ๋ผ์ธ ์Šคํƒ€์ผ์€ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•œ๋‹ค. ๋˜ํ•œ ์Šคํƒ€์ผ ์†์„ฑ์€ ์นด๋ฉœ ํ‘œ๊ธฐ๋ฒ•(camelCase)์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • JSX์—์„œ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•  ๋•Œ class ๋Œ€์‹  className์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  • ํƒœ๊ทธ๋Š” ๊ผญ ๋‹ซ๊ธฐ
  • ์ฃผ์„
    • JSX ๋‚ด๋ถ€์˜ ์ฃผ์„์€ {/*์ด๋Ÿฐ ํ˜•ํƒœ๋กœ*/}
    • ์‹œ์ž‘ ํƒœ๊ทธ ๋‚ด๋ถ€์—์„œ๋Š” // ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ๋„ ๊ฐ€๋Šฅ
post-custom-banner

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