๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

JSX๋ž€? ๋ณธ๋ฌธ

๐Ÿ“š Language & CS knowledge/React

JSX๋ž€?

Daehyunii 2022. 12. 20. 00:11
JSX๋ž€?
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ™•์žฅ ๋ฌธ๋ฒ•์ด๋ฉฐ XML๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค. 

  ์šฐ์„  JSX๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๊ธฐ ์ „ ๋ฒˆ๋“ค๋ง๋˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ”๋ฒจ์„ ํ†ตํ•ด ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. 

๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž. 

JSX

function App() {
  return (
    <div>
    	Hello <b>react</b>
    </div>
  )
}


๋ณ€ํ™˜

function App() {
  return React.createElement("div", null, "Hello", React.createElement("b", null, "react"))
}

 

์ด ์ฒ˜๋Ÿผ JSX๋ฅผ ํ†ตํ•ด์„œ ์šฐ๋ฆฌ๋Š” JavaScript๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ๋“ค์„ ๊ฐ„๋žตํ•˜๊ณ  ์‹œ๊ฐ์ ์œผ๋กœ๋„ ๋ณด๊ธฐ ์ข‹๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•œ ๋งˆ๋””๋กœ JSX๋Š” ๋ณด๊ธฐ ์‰ฝ๊ณ  ์šฐ๋ฆฌ์—๊ฒŒ ์ต์ˆ™ํ•œ ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋œ๋‹ค. ๋˜ํ•œ JSX ๋ฌธ๋ฒ•์„ ํ™œ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งˆ์น˜ HTML ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋“ฏ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

(JSX)
import TestComponent from "./TestComponent"

const App = () => {
	return (
    <>
    	<TestComponent />
    </>
    )
}

 

JSX์˜ ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

1. return ๋ฌธ์—๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ์š”์†Œ๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

 

๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž.

function App() {
  return (
  	<h1>์ œ๋ชฉ</h1>
  	<div>
    	Hello <b>react</b>
    	</div>
  )
}

export default App;

 

  ์œ„์˜ ํƒœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด h1ํƒœ๊ทธ์™€ divํƒœ๊ทธ๊ฐ€ ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์œ„์น˜ํ•œ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๋‚˜ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ–ˆ๋˜ ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ํ™•์ธํ•ด ๋ณด๋ฉด 

Failed to compile์ด๋ผ๋Š” ๋ฌธ๊ตฌ์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

<div>ํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  React ๋ชจ๋“ˆ์— ๋“ค์–ด ์žˆ๋Š” Fragment๋ฅผ ํ†ตํ•ด ๊ฐ์‹ธ์ค„ ์ˆ˜ ์žˆ๋‹ค. 

 

import React from 'react';
const { Fragment } = React;

function App() {
  return (
    <Fragment>
      <h1>์ œ๋ชฉ</h1>
      <div>
      Hello <b>react</b>
      </div>
    </Fragment> 
  )
}

export default App;

์ฐธ๊ณ ๋กœ Flagmentํƒœ๊ทธ๋Š” <></>๋กœ ๊ฐ„๋žตํ•˜๊ฒŒ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค!

 

2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„

  JSX๋Š” ์•ˆ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. JSX ๋‚ด๋ถ€์—์„œ ์ฝ”๋“œ๋ฅผ { }๋กœ ๊ฐ์‹ธ๋ฉด ๋œ๋‹ค. ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋ผ ํ‘œํ˜„์‹, ์ฆ‰ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

 

import React from 'react';
const { Fragment } = React;

function App() {
const hello = 'world'

  return (
    <Fragment>
        <h1>{hello}</h1>
        <div>
        Hello <b>react</b>
        </div>
    </Fragment> 
  )
}

export default App;

 

3. If ๋ฌธ ๋Œ€์‹  ์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด๋ผ

  ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด { } ๋‚ด๋ถ€์—๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ { } ๋‚ด๋ถ€์—์„œ ์กฐ๊ฑด์‹์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

import React from "react";
const { Fragment } = React;

function App() {
  const hello = "world";

  return (
    <Fragment>
      {hello === "world" ? <h1>{hello}</h1> : null}
      <div>
        Hello <b>react</b>
      </div>
    </Fragment>
  );
}

export default App;

 

4. ๋…ผ๋ฆฌ๊ณฑ ์—ฐ์‚ฐ์ž์™€ ๋…ผ๋ฆฌํ•ฉ ์—ฐ์‚ฌ์ž ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง

  ์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ &&์™€ ||๋ฅผ ํ™œ์šฉํ•ด์„œ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

import React from "react";
const { Fragment } = React;

function App() {
  const hello = "world";

  return (
    <Fragment>
      {hello === "world" && <h1>{hello}</h1>}
      <div>
        Hello <b>react</b>
      </div>
    </Fragment>
  );
}

export default App;

 

5. ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋ง

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

 

function App() {
  const hello = "world";
  const style = {
    backgroundColor: "black"
  }
  return <div style={ style }>{ name }</div>
}

export default App;

 

6. class ๋Œ€์‹  className

  ์ผ๋ฐ˜ HTML์—์„œ CSS ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” <div class="hello"></div>์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ๋˜์—ˆ์ง€๋งŒ JSX์—์„œ๋Š” class๊ฐ€ ์•„๋‹Œ className์œผ๋กœ ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. <div className="hello"></div>

 

7. ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋กœ ์ž‘์„ฑํ•˜๋Š” ํƒœ๊ทธ์˜ ๊ฒฝ์šฐ์—๋Š” ๊ผญ ๋‹ซ์•„ ์ฃผ์–ด์•ผ ํ•œ๋‹ค

  ์ผ๋ฐ˜ HTML์—์„œ <input>์ด๋ผ๊ณ  ์ž‘์„ฑํ•ด๋„ ์ž‘๋™ํ•˜๋Š”๋ฐ ์•„๋ฌด ์ง€์žฅ์ด ์—†์ง€๋งŒ <input />๋กœ ๊ผญ ๋‹ซ์•„์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ self-closing ํƒœ๊ทธ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.