๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

react

React / JSX ๋ฌธ๋ฒ•

JSX(JavaScript XML)

React์—์„œ ์‚ฌ์šฉ๋˜๋Š” Javascript์˜ ํ™•์žฅ ๋ฌธ๋ฒ•์œผ๋กœ, HTML๊ณผ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋กœ Javascript ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฌด์กฐ๊ฑด jsx๋ฅผ ์“ธ ํ•„์š”๋Š” ์—†์ง€๋งŒ, ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

๊ทœ์น™

  1. return๋ฌธ ์•ˆ์— HTML ํ˜•ํƒœ๋กœ ์ž‘์„ฑ
  2. ๋‘ ์ค„ ์ด์ƒ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ์†Œ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์•ผ ํ•จ
  3. ํ•˜๋‚˜์˜ ์ตœ์ƒ์œ„ ์š”์†Œ๋กœ ๋ฌถ์–ด์ค˜์•ผ ํ•จ
    ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” Javascript ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ๊ฐ์‹ธ์ง€ ์•Š์€ ํ•จ์ˆ˜์—์„œ๋Š” ๋‘ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— <div></div>๋‚˜ <></>(Fragment : ๋ธŒ๋ผ์šฐ์ €์ƒ html ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ํ”์  ์—†์ด ๊ทธ๋ฃนํ™”)๋กœ๋ผ๋„ ๊ฐ์‹ธ์ค˜์•ผ ํ•œ๋‹ค.
  4. ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด Javascript ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•จ

 

// JSX ๋ฌธ๋ฒ• ์‚ฌ์šฉ
function App() {
  return (
    <h1>์•ˆ๋…•ํ•˜์„ธ์š”</h1>
  );
}

// JSX ๋ฌธ๋ฒ• ์‚ฌ์šฉX
function App() {
  return React.createElement("h1", null, "์•ˆ๋…•ํ•˜์„ธ์š”");
}

 

 

์ง€๊ธˆ์€ ํ•œ์ค„๋งŒ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— return ๋’ค ์†Œ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•ด๋„ ์ƒ๊ด€์—†์ง€๋งŒ ๋‘ ์ค„ ์ด์ƒ์˜ ๊ฒฝ์šฐ ์œ„์˜ ๊ทœ์น™ 2๋ฒˆ๊ณผ 3๋ฒˆ์„ ๊ผญ ์ง€์ผœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

 

function App(){
  return (
  <div>ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ
    <p>์ž์‹ ์š”์†Œ 1</p>
    <p>์ž์‹ ์š”์†Œ 2</p>
    <div>์ž์‹ ์š”์†Œ 3
      <p>์ž์‹์˜ ์ž์‹์š”์†Œ</p>
    </div>
  </div>
  );
}

 

4๋ฒˆ์ธ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์—ฐ์‚ฐ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, return๋ฌธ์˜ ์•ž์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด return๋ฌธ ๋‚ด์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด {}์— ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

function App(){
  const pTag = document.querySelectorAll('p');
  const pCount = pTag.length
  return (
  <div>ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ
    <p>์ž์‹ ์š”์†Œ 1</p>
    <p>์ž์‹ ์š”์†Œ 2</p>
    <div>์ž์‹ ์š”์†Œ 3
      <p>์ž์‹์˜ ์ž์‹์š”์†Œ</p>
      <p>1+1์˜ ๊ฐ’์€?</p>
      <p>= {1+1}</p>
    </div>
    <div>p์š”์†Œ์˜ ๊ฐœ์ˆ˜๋Š” {pCount}๊ฐœ</div>
  </div>
  );
}

 

 


 

 

์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์šฐ์„  ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ์™€ ์ „ํ˜€ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€์–ด๋ณด์ด๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

 

์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐX

 

App.jsx

function App(){
  return (
    <>
      <div className="bread">
        ๋ฐ€๊ฐ€๋ฃจ
        <span>๋ฌผ</span>
        <span>๊ณ„๋ž€</span>
        <span>์ด์ŠคํŠธ</span>
      </div>
      <div className="patty meat">
        ์†Œ๊ณ ๊ธฐ
        <span>ํ›„์ถ”</span>
        <span>์†Œ๊ธˆ</span>
      </div>
      <div className="lettuce">
        ์žŽ์‚ฌ๊ท€
        <span>์ค„๊ธฐ</span>
      </div>
      <div className="tomato">
        ๊ป์งˆ
        <span>๊ณผ์œก</span>
        <span>์”จ์•—</span>
      </div>
      <div className="cheese">
        ์šฐ์œ 
        <span>์†Œ๊ธˆ</span>
        <span>์ƒ‰์†Œ</span>
      </div>
      <div className="bread">
        ๋ฐ€๊ฐ€๋ฃจ
        <span>๋ฌผ</span>
        <span>๊ณ„๋ž€</span>
        <span>์ด์ŠคํŠธ</span>
      </div>
    </>
  );
}

 

App.css

๋”๋ณด๊ธฐ
* {
  box-sizing: border-box;
  text-align: center;
}
body {
  justify-content: center;
}
span {
  margin-left: 1em;
}
.bread {
  background-color: orange;
}
.patty{
  background-color: brown;
}
.lettuce {
  background-color: green;
}
.tomato {
  background-color: red;
}
.cheese {
  background-color: yellow;
  color:black;
}

 

 

ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ

 

App.jsx

import "./App.css";

function App() {
  return (
    <>
      <Bread />
      <Patty />
      <Lettuce />
      <Tomato />
      <Cheese />
      <Bread />
    </>
  );
}

function Bread() {
  return (
    <div className="bread">
      ๋ฐ€๊ฐ€๋ฃจ
      <span>๋ฌผ</span>
      <span>๊ณ„๋ž€</span>
      <span>์ด์ŠคํŠธ</span>
    </div>
  );
}

function Patty() {
  return (
    <div className="patty meat">
      ์†Œ๊ณ ๊ธฐ
      <span>ํ›„์ถ”</span>
      <span>์†Œ๊ธˆ</span>
    </div>
  );
}

function Lettuce() {
  return (
    <div className="lettuce">
      ์žŽ์‚ฌ๊ท€
      <span>์ค„๊ธฐ</span>
    </div>
  );
}

function Tomato() {
  return (
    <div className="tomato">
      ๊ป์งˆ
      <span>๊ณผ์œก</span>
      <span>์”จ์•—</span>
    </div>
  );
}

function Cheese() {
  return (
    <div className="cheese">
      ์šฐ์œ 
      <span>์†Œ๊ธˆ</span>
      <span>์ƒ‰์†Œ</span>
    </div>
  );
}

export default App;

 

 

์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์€ ๋ฌด์กฐ๊ฑด ๋Œ€๋ฌธ์ž๋กœ. ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค...

๊ทธ๋ฆฌ๊ณ  ์ƒ‰์ƒ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด className์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋ถ€์—ฌํ•ด์คฌ๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ์ด๋ฏธ js์—์„œ class๊ฐ€ ์˜ˆ์•ฝ์–ด๋กœ ์ง€์ •๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— className์„ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค. (class์—ฌ๋„ ์ ์šฉ์€ ๋˜์ง€๋งŒ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ€ ๋งŽ์ด ๋œฐ ์ˆ˜ ์žˆ๋‹ค.) 

 

์•„๊นŒ ์ฝ”๋“œ๋ณด๋‹ค ๊ธธ์–ด์กŒ์ง€๋งŒ ์ด์ œ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค๋ฅธ ๊ตฌ์กฐ์˜ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค.

๋ฌผ๋ก  ์ด๊ฒฝ์šฐ์—๋„ ์žฌ๋ฃŒ๋ฅผ ๋งŽ์ด ๋„ฃ์œผ๋ฉด ๋ณด๊ธฐ ์ข€ ๋ณต์žกํ•ด์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

์ƒˆ๋กœ์šด ๋ฒ„๊ฑฐ ๋ฉ”๋‰ด๋ฅผ ๋งŒ๋“ค๋“ฏ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์šฉํ•ด ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค.

 

import "./App.css";

function App() {
  return (
    <>
      <ClassicBurger />
    </>
  );
}

function ClassicBurger() {
  return (
    <>
      <p>๊ธฐ๋ณธ ๋ฒ„๊ฑฐ</p>
      <Bread />
      <Patty />
      <Lettuce />
      <Tomato />
      <Cheese />
      <Bread />
    </>
  );
}

function DoubleCheeseBurger() {
  return (
    <>
      <p>๋”๋ธ”์น˜์ฆˆ๋ฒ„๊ฑฐ</p>
      <Bread />
      <Patty />
      <Cheese />
      <Patty />
      <Cheese />
      <Bread />
    </>
  );
}

/* ๋ฒ„๊ฑฐ ์žฌ๋ฃŒ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์ƒ๋žต */

export default App;