GiantStepDEV
article thumbnail

JSX ?

JSX (JavaScript XML)์€ JavaScript ์–ธ์–ด์˜ ํ™•์žฅ์œผ๋กœ, ๊ฐœ๋ฐœ์ž๋“ค์ด JavaScript ์ฝ”๋“œ ๋‚ด์—์„œ HTML๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ์ธ๊ธฐ์žˆ๋Š” JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ React์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

JSX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTML์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” JavaScript์™€ HTML์˜ ํ˜ผํ•ฉ๋ฌผ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • JSX(JavaScript XML)๋Š” Javascript์— XML์„ ์ถ”๊ฐ€ํ•œ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•์ด๋‹ค.
  • JSX๋Š” ๋ฆฌ์•กํŠธ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ๊ณต์‹์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์€ ์•„๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋ฐ”๋ฒจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
  • JSX๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ HTML์„ ๋™์‹œ์— ์ž‘์„ฑํ•˜์—ฌ ํŽธ๋ฆฌํ•˜๋‹ค.
  • JSX๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์œ ์‚ฌํ•˜๋ฏ€๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ˆ์•ฝ์–ด ์‚ฌ์šฉ์„ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.

โœ… ์งš๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ

  1. ๊ฐ•๋ ฅํ•œ ๋ฌธ๋ฒ•์ฒดํฌ
    ๐Ÿ‘‰ HTML์€ ํƒœ๊ทธ๋ฅผ ์•ˆ๋‹ซ์•„๋„ ์˜ค๋ฅ˜๊ฐ€ ์•ˆ๋‚˜์ง€๋งŒ JSX์—์„œ๋Š” ํ™•์‹คํžˆ ๋‹ซ์•„์•ผ ํ•œ๋‹ค.
  2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ‘œ์ค€ ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํฌ๋กฌ์ด ํ•ด์„์„ ๋ชป ํ•จ.
    ๐Ÿ‘‰ ๋”ฐ๋ผ์„œ, ๋ฐ”๋ฒจ์„ ์ด์šฉํ•˜์—ฌ ๋ณ€ํ™˜๊ณผ์ •์ด ํ•„์š”ํ•จ(JSX -> ES5)
  3. import / export ๊ตฌ๋ฌธ์€ Node.js์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ
  4. ํƒœ๊ทธ์— className๋งŒ ์”€
    ๐Ÿ‘‰ ์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ผํ•œ ๊ฐ’์ด์–ด์•ผ ํ•˜๋Š” id ์•ˆ ์”€
    ๐Ÿ‘‰๐Ÿ‘‰ id๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์žˆ์Œ (ref) - ์ถ”ํ›„ ์ถ”๊ฐ€ ์˜ˆ์ •
  5. return ๋ฌธ์—๋Š” HTML, ํ•จ์ˆ˜ ์˜์—ญ์—๋Š” JavaScript

๊ธฐ๋ณธ ์ฝ”๋“œ

๊ธฐ๋ณธ ์ฝ”๋“œ (App.js)

import './App.css';

function App() {
  const name = "์–‘์ฝฉ๋ฏธ";

  return (
    <div>
      <p>ํ™˜์˜ ํ•ฉ๋‹ˆ๋‹ค. {name} ๋‹˜!!</p>
    </div>
  );
}

export default App;
๋ Œ๋”๋ง ํ›„ DOM์— ๋ถ™์ผ ๋•Œ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด ๋ฐ˜๋“œ์‹œ!!!
๋ถ€๋ชจ๋กœ ๊ฐ์‹ธ์ค˜์•ผ ํ•จ!!!!
  1. <div> ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ๊ธฐ
  2. <></> ๐Ÿ†• (์ตœ๊ทผ ์œ ํ–‰(?))

1๏ธโƒฃ ๋‹คํ•ญ ์—ฐ์‚ฐ์ž

์˜ˆ) ๊ฐ™์€ ํ™ˆ ํ™”๋ฉด์ด์ง€๋งŒ ๊ฐ€์ž… ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋ณด์—ฌ์•ผ ํ•  ๋•Œ

import './App.css';

function App() {
  const name = "๋ฆฌ์•กํŠธ";

  return (
    <>
      {name === "๋ฆฌ์•กํŠธ" ? (<h1>๋ฆฌ์•กํŠธ ์ž…๋‹ˆ๋‹ค.</h1>) : (<h1>๋ฆฌ์•กํŠธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.</h1>)}
    </>
  );
}

export default App;

2๏ธโƒฃ AND(๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž)

์˜ˆ) ์„œ๋ฒ„์— ์ •๋ณด๊ฐ€ ๋‚ด๋ ค์™”๋Š”์ง€ ์•ˆ๋‚ด๋ ค์™”๋Š”์ง€์— ๋”ฐ๋ผ ..(async await์—์„œ await ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋ Œ๋”๋ง ํ•ด๋ผ!!)

 

โœจ OR๋„ ์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์ ์ด ์—†์–ด์„œ ์ฃผ๋กœ AND๋ฅผ ์”€

โœจ if๋ฌธ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด๋ฌธ ๋ถˆ๊ฐ€

โœจ ์•ž์ด ์ฐธ์ด์–ด์•ผ ๋’ค ํ™•์ธ (์•ž์ด ๊ฑฐ์ง“์ด๋ฉด ์•„์˜ˆ ๋ Œ๋”๋ง ์•ˆ ํ•จ)

{name === "๋ฆฌ์•กํŠธ" && <h1>๋ฆฌ์•กํŠธ ํ™”๋ฉด์„ ๊ฐฑ์‹  ํ•ฉ๋‹ˆ๋‹ค....</h1>}

CSS style ๋„ฃ๊ธฐ

  โœจ ๋ฆฌ์•กํŠธ์—์„œ DOM ์š”์†Œ์— ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ๋•Œ๋Š” ๋ฌธ์ž์—ด ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋„ฃ์–ด์•ผ ํ•จ
  โœจ ์Šคํƒ€์ผ ์ด๋ฆ„ ์ค‘์—์„œ background-color ์ฒ˜๋Ÿผ ํ•˜์ดํ”ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด Camel ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ.

   ๐Ÿ”ฎ VSCode ํ”Œ๋Ÿฌ๊ทธ์ธ : vscode-styled-components ์„ค์น˜ํ•˜๋ฉด ์ž๋™์™„์„ฑ ๋จ

function App() {
  const name = "๋ฆฌ์•กํŠธ";
  
  const style = {
    backgroundColor : "#eee",
    color : "royalblue",
    fontSize : "2em",
  };

import './App.css';

function App() {
  const member = {
    name : "ํ™๊ธธ๋™",
    job : "๊ฐœ๋ฐœ์ž",
    addr : "์„œ์šธ์‹œ ๊ฐ•๋‚จ๊ตฌ",
    gender : "๋‚จ์„ฑ"
  };
  function getGreeting(user) {
    return (user) ? (<h1>ํ™˜์˜ ํ•ฉ๋‹ˆ๋‹ค. {member.name}๋‹˜!</h1>) : (<h1>ํ™˜์˜ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฌธ์ž๋‹˜.</h1>);
  }

  return (
    // class ํ‚ค์›Œ๋“œ๋Š” JSX ๋ฌธ๋ฒ•์—์„œ๋Š” className์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ.(class๋กœ ํ•˜๋ฉด ํƒœ๊ทธ๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ)
    <div className="App">
      <p className="title-name">์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” {member.name} ์ž…๋‹ˆ๋‹ค.</p>
      <p className="title-name">์ง์—…์€ {member.job} ์ž…๋‹ˆ๋‹ค.</p>
      <p className="title-name">์‚ฌ๋Š” ๊ณณ์€ {member.addr} ์ž…๋‹ˆ๋‹ค.</p>
      <p className="title-name">์„ฑ๋ณ„์€ {member.gender} ์ž…๋‹ˆ๋‹ค.</p>
      <div>{getGreeting(true)}</div>
    </div>
  );
}

export default App;
profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!