๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš€ Development/React Native

[React Native] JSX ๋ž€? / JSX ๋ฌธ๋ฒ•

by Jay Din 2023. 6. 15.
728x90
๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

JSX๋ž€?

JavaScript์—์„œ XML์„ ์ถ”๊ฐ€ํ•œ ํ™•์žฅํ˜• ๋ฌธ๋ฒ•์ด๋‹ค.

XML(eXtensible Markup Language)์€ ํƒœ๊ทธ(tag, <>)์˜ ์ด๋ฆ„์„ ์ž์œ ๋กญ๊ฒŒ ์ง“๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ด๋‹ค. ์ด๋ฅผ JavaScript์— ์ ์šฉ ์‹œํ‚จ ๊ฒƒ์ด ๋ฐ”๋กœ JSX์ด๋‹ค.

โ€‹

์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ฝ”๋“œ๊ฐ€ ๋ฒˆ๋“ค๋ง๋˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ”๋ฒจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ JavaScript ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

โ€‹

* ๋ฐ”๋ฒจ(Babel)

์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Babel์„ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์ด๋‹ค. ์ดˆ๊ธฐ์˜ ๋ฐ”๋ฒจ์€ ES6 ์ฝ”๋“œ๋ฅผ ES5 ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ์ผ๋งŒ ํ–ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” ๋ฆฌ์•กํŠธ์˜ JSX๋ฌธ๋ฒ•๋„ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

ํŠธ๋ Œ์ŠคํŒŒ์ผ๋Ÿฌ๋Š” ์†Œ์Šค๋ฅผ ์ž…๋ ฅ ๋ฐ›์œผ๋ฉด ๋‹ค๋ฅธ ์†Œ์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ผ์ข…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

๋ฐ”๋ฒจ ์ง„ํ–‰ ๋‹จ๊ณ„

1. ํŒŒ์‹ฑ(Parsing): ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋‹จ๊ณ„

2. ๋ณ€ํ™˜(Transforming): ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝ

3. ์ถœ๋ ฅ(Printing): ๋ณ€๊ฒฝ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ถœ๋ ฅ

โ€‹

React native๋Š” JSX๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ค‘์š”ํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜๊ฐ€ ’์ง๊ด€์ ’์ด๋‹ค. JSX๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ์‰ฝ๊ฒŒ ์ ์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ€‹

* ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ํ™”๋ฉด์— ์–ด๋–ค UI๊ฐ€ ๊ทธ๋ ค์งˆ์ง€ ์ถฉ๋ถ„ํžˆ ์˜ˆ์ƒ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ‘์ง๊ด€์ ’์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

 

JSX ๋ฌธ๋ฒ•

1. ๋‘˜๋Ÿฌ์‹ผ ๊ตฌ์กฐ

์ปดํฌ๋„ŒํŠธ์— ์—ฌ๋Ÿฌ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ์š”์†Œ ํ•˜๋‚˜๊ฐ€ ๊ฐ์‹ธ๋Š” ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€๋Š” ํ•˜๋‚˜์˜ DOMํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๊ทœ์น™ ๋•Œ๋ฌธ์ด๋‹ค.

// ์—๋Ÿฌ
return(
<Text>ํ…Œ์ŠคํŠธ1</Text>
<Text>ํ…Œ์ŠคํŠธ2</Text>
)
// ๋ฐ”๊นฅ์„ View๋กœ ๊ฐ์‹ผ ๋ชจ์Šต
return(
<View>
<Text>ํ…Œ์ŠคํŠธ1</Text>
<Text>ํ…Œ์ŠคํŠธ2</Text>
</View>
)

2. ๋ณ€์ˆ˜ ์ฐธ์กฐ

JSX ์•ˆ์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. JSX ๋‚ด๋ถ€์—์„œ { }๋กœ ๋ Œ๋”๋งํ•˜๋ฉด ๋œ๋‹ค.

const name = '๋ฆฌ์•กํŠธ';
 return (
      <View>
          // ๋ Œ๋”๋ง // ๋ฆฌ์•กํŠธ
          <Text>{name}</Text> 
          // name  
          <Text>name</Text>     
      </View>
 );

3. if๋ฌธ ๋Œ€์‹  ์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์ž

JSX ๋‚ด๋ถ€์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹ ๋‚ด์—์„œ if๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์„œ, ์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์ž(์‚ผํ•ญ ์—ฐ์‚ฐ์ž)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

for๋ฌธ ๋Œ€์‹  map(), else if๊ณผ switch๋ฌธ ๋Œ€์‹  ์ค‘์ฒฉ ์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์ž,

 ==์€ ๊ฐ’๋งŒ ๊ฐ™์œผ๋ฉด true์ด์ง€๋งŒ, ===์€ ๊ฐ’์˜ ํƒ€์ž…๊นŒ์ง€ ๋ชจ๋‘ ๊ฐ™์€์ง€ ๋น„๊ตํ•œ๋‹ค.

 

* Map()์ด๋ž€

๊ฐ„๋‹จํ•œ ํ‚ค์™€ ๊ฐ’์„ ์„œ๋กœ ์—ฐ๊ฒฐ(๋งคํ•‘) ์‹œ์ผœ ์ €์žฅํ•˜๋ฉฐ ์ €์žฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ์š”์†Œ๋“ค์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•: ๊ฐ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ๋Œ๋ฉด์„œ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ ๋œ ์ƒˆ๋กœ์šด ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  const name = '๋ฆฌ์•กํŠธ';
  return (
   <View>
          {name === '๋ฆฌ์•กํŠธ' ? <Text>๋ฆฌ์•กํŠธ</Text> : <Text>๋ฆฌ์•กํŠธ๊ฐ€ ์•„๋‹˜</Text> }
   </View>
  );

4. AND ์—ฐ์‚ฐ์ž(&&)๋ฅผ ์‚ฌ์šฉํ•œ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง

&& ์—ฐ์‚ฐ์ž๋Š” ์ฐธ์ผ ๊ฒฝ์šฐ์—๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ์—” ์•„๋ฌด ์•ก์…˜๋„ ์ทจํ•˜์ง€ ์•Š๋Š”๋‹ค.

(else๋ฌธ์ด ์—†๋Š” ์กฐ๊ฑด๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.)

   const name = “react”;
   return (
      <View> 
         { name === “๋ฆฌ์•กํŠธ” ? <Text>๋งž์•„</Text> : null }  // ์‚ผํ•ญ ์—ฐ์‚ฐ์ž
      </View>

      {/* or (๋” ์งง๊ฒŒ) */}
      <View>
         { name === “๋ฆฌ์•กํŠธ” && <Text>๋งž์•„</Text> }
      </View>
  );
๋ฐ˜์‘ํ˜•

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

HTML์—์„œ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•  ๋• background-color์™€ ๊ฐ™์ด ํ•˜์ง€๋งŒ, JSX์—์„œ๋Š” -๋ฅผ ์—†์• ๊ณ  ์นด๋ฉœ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

// ์˜ˆ:background-color -> backgroundColor
 const style = {
      backgroundColor: 'white',
      fontSize: '10px',
      fontWeight: 'bold'
  }

  return (
   <View style={style}>
       <Text>ํ…Œ์ŠคํŠธ</Text>
 	</View>
  )

6. class ๋Œ€์‹  className

JSX๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ JSX์˜ ClassName ์†์„ฑ์„ ์ž๋™์œผ๋กœ class ์†์„ฑ์œผ๋กœ ๋ Œ๋”๋ง ํ•œ๋‹ค.

className์ด ์•„๋‹Œ class๋กœ ์„ค์ •ํ•ด๋„ ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€๋งŒ console์— ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.

(๋ฆฌ์•กํŠธ v16 ์ด์ƒ๋ถ€ํ„ฐ๋Š” class๋ฅผ className์œผ๋กœ ๋ณ€ํ™˜์‹œ์ผœ ์ฃผ๊ณ  ๊ฒฝ๊ณ ๋ฅผ ๋„์šด๋‹ค.)

CSS class๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด className ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์ธ ๋ชจ๋“  DOM ์š”์†Œ๋“ค์— ์ ์šฉ๋œ๋‹ค.

const name = “๋ฆฌ์•กํŠธ”;
 return (
    <View>
        <Text className = “react”>
                     {name}</Text>
    </View>
 )

7. ๊ผญ ๋‹ซ์•„์•ผ ํ•˜๋Š” ํƒœ๊ทธ

JSX์—์„œ๋Š” ํƒœ๊ทธ๋ฅผ ๋‹ซ์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋‹ซ๋Š” ํƒœ๊ทธ๊ฐ€ ์—†์œผ๋ฉด ์ปดํŒŒ์ผ ์กฐ์ฐจ ๋˜์ง€ ์•Š๋Š”๋‹ค.

<View></View>
<View />       //self-colsing ํƒœ๊ทธ
728x90
๋ฐ˜์‘ํ˜•