[React] JSX

Hannahhhยท2022๋…„ 7์›” 29์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
2/30

๐Ÿ” JSX?


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

JSX๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” JavaScript ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” JavaScript ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜(์ปดํŒŒ์ผ)ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

์ด ๋•Œ Babel ์ด ์•Œ์•„์„œ JSX ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™˜ํ•ด ์ค€ ํ›„, JavaScript๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ๊ณ  ํ™”๋ฉด์— ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋‹ค.



โœ” DOM & JSX

๋˜ํ•œ, React์—์„œ๋Š” DOM๊ณผ ๋‹ค๋ฅด๊ฒŒ CSS, JSX ๋ฌธ๋ฒ•๋งŒ์„ ๊ฐ€์ง€๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, JSX ์‚ฌ์šฉ ์‹œ, JavaScript ๋งŒ์œผ๋กœ ๋งˆํฌ์—…ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ DOM์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.



โœ” Why JSX?

DOM์—์„œ JavaScript์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JavaScript์™€ HTML์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, React์—์„œ๋Š” JSX๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณด๋‹ค ๋ช…์‹œ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ํ•œ ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜๋Š” ์œ„์˜ ์˜ˆ์ œ์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.


JSX๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  React์š”์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.



๐Ÿ‘€ JSX ํ™œ์šฉ


โœ” JSX ๊ทœ์น™


  • ํ•˜๋‚˜์˜ element ์•ˆ์— ๋ชจ๋“  element๊ฐ€ ํฌํ•จ๋œ๋‹ค.

JSX์—์„œ ์—ฌ๋Ÿฌ element๋ฅผ ์ž‘์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ, ์ตœ์ƒ์œ„์—์„œ opening tag์™€ closing tag๋กœ ๊ฐ์‹ธ์ฃผ์–ด์•ผ ํ•œ๋‹ค.



  • element class ์†์„ฑ ์ง€์ • ์‹œ, className์œผ๋กœ ํ‘œ๊ธฐํ•œ๋‹ค.



  • JavaScript๋ฅผ ์“ธ ๋•Œ, ์ค‘๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค.(์‚ฌ์šฉ x => ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ธ์‹)



  • ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค.(PascalCase)

React element๊ฐ€ JSX๋กœ ์ž‘์„ฑ๋  ๋•Œ, ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ HTML element๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค.



  • ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์€ if๋ฌธ์ด ์•„๋‹Œ, ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค.



  • ์—ฌ๋Ÿฌ๊ฐœ์˜ HTML element๋ฅผ ํ‘œ์‹œํ•  ๋•Œ, map( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

map() ์‚ฌ์šฉ ์‹œ, ๋ฐ˜๋“œ์‹œ key JSX ์†์„ฑ์„ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.



JSX ํ™œ์šฉ ์˜ˆ์‹œ

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">
      <h1>Hello JSX</h1>
      {posts.map(postToJSX)}
    </div>
  );
}




Reference: ์ฝ”๋“œ์Šคํ…Œ์ด์ธ 

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