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

FA/React

React์˜ JSX / Javascript์™€ ๋‹ค๋ฅธ ์  / JSX ๊ทœ์น™

JSX (JavaScript XML)

  • Javascript์— XML์„ ์ถ”๊ฐ€ํ•œ ํ™•์žฅ ๋ฌธ๋ฒ•
  • XML(eXtensible Markup Language)์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ํ•˜๋“œ์›จ์–ด ๋…๋ฆฝ์ ์ธ ๋„๊ตฌ

JS์™€ JSX๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€์š”?

JS์™€ JSX๋Š” ๋‘˜ ๋‹ค ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ฐจ์ด์ ์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹๊ณผ ๊ธฐ๋Šฅ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ถ„ํ• ๋˜๋Š” ๋ฐฉ์‹์— ์žˆ์Šต๋‹ˆ๋‹ค.

JS์˜ ๊ฒฝ์šฐ ๊ฐ„๋‹จํ•œ HTML์ด ๋จผ์ € ์ž‘์„ฑ๋˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ๋‚ด์— JS๊ฐ€ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

<div>
 <h1>Fruit List</h1>
 <ul id="fruit-list">
 <li>Orange

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” JavaScript๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

<script>
function addItemToList() {
// Add item
}
</script>

๊ทธ๋Ÿฌ๋‚˜ React์˜ ์œ ์‚ฌํ•œ JSX ์ฝ”๋“œ๋Š” ๊ณ ์ • HTML ํŒŒ์ผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

<div id="root"></div>

๊ทธ๋Ÿฐ ๋‹ค์Œ HTML๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ JSX์ธ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

function FruitList(props) {
 return (
 <div>
 <h1>Fruit List</h1>
 <ul>
 <li>Mango</li>
 <li>Pear</li>
 <li>Guava</li>
 </ul>
 </div>)};

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๋Šฅ๋„ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ถ„ํ• ๋˜๋ฏ€๋กœ ๋ณต์žกํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

React๋Š” JS์™€ JSX ๋ชจ๋‘๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ JSX๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ JSX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTML๊ณผ ์œ ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTML ์ฝ”๋“œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋Šฅ์„ ๋” ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


JSX ๊ทœ์น™

1. ๋‘ ๊ฐœ ์ด์ƒ์˜ ํƒœ๊ทธ๋Š” ๊ผญ ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค.(div/section/article ๋˜๋Š” React Fragment):

๋‘๊ฐœ ์ด์ƒ์˜ ํƒœ๊ทธ๋ฅผ ๊ฐ์‹ธ๋Š” ํƒœ๊ทธ div/section/article ๋“ฑ์œผ๋กœ ๊ฐ์‹ธ ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.  ๋งŒ์•ฝ ๊ตณ์ด ์–ด๋– ํ•œ HTML element๋กœ ๊ฐ์‹ธ๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๊ณ  ํ•˜๋ฉด ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋น„์–ด์žˆ๋Š” ํƒœ๊ทธ(Fragment ํƒœ๊ทธ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. Fragment ํƒœ๊ทธ๋Š” ์•„๋ฌด๋Ÿฐ ์—ญํ• ๋„ ํ•˜์ง€ ์•Š๊ณ  ์ด ๊ทœ์น™์„ ์ง€์ผœ์ค๋‹ˆ๋‹ค.

<>
  <div>๋‘๊ฐœ ์ด์ƒ์ด ๋œ๋‹ค๋ฉด</div>
  <article>์ด๋ ‡๊ฒŒ ๋นˆํƒœ๊ทธ๋กœ ๊ฐ์‹ธ๊ธฐ ๊ฐ€๋Šฅ</article >
</>

2.  camelCase ๋ฐ -(ํ•˜์ดํ”ˆ)์œผ๋กœ ๊ตฌ๋ถ„ ๋˜๋Š” ๊ฐ’๋“ค ex)font-size → fontSize:

JavaScript์—์„œ๋Š” "onclick()"๊ณผ ๊ฐ™์€ ์ธ๋ผ์ธ ์†์„ฑ ๋˜๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ React์˜ ๊ฒฝ์šฐ ์ด์™€ ๊ฐ™์€ ์†์„ฑ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. JavaScript์˜ "onclick" ์†์„ฑ์€ ๋Œ€๋ฌธ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค 

* camelCase๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ณตํ•ฉ์–ด์—์„œ ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋Š” ๋ช…๋ช… ๊ทœ์น™

3. class ๋Œ€์‹  className:

HTML์—์„œ๋Š” ํŠน์ • ์š”์†Œ์— ๋Œ€ํ•ด ํด๋ž˜์Šค ์†์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. JavaScript ํ”„๋ ˆ์ž„์›Œํฌ์ธ React๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ES6์—์„œ๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ์•ฝ ํ‚ค์›Œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. HTML ์†์„ฑ์— ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— className์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4. ๋ชจ๋“  ์š”์†Œ ๋‹ซ๊ธฐ:

HTML์—์„œ <img>, <input>, <br>๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฑฐ์˜ ๋ชจ๋“  ํƒœ๊ทธ์— ์‹œ์ž‘ ๋ฐ ๋‹ซ๋Š” ํƒœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช‡ ๊ฐ€์ง€ ํƒœ๊ทธ์—๋Š” ๋‹ซ๋Š” ํƒœ๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ React JSX์—์„œ๋Š” ๋ชจ๋“  ํƒœ๊ทธ๋Š” ๋‹ซ๋Š” ํƒœ๊ทธ๊ฐ€ ์—†๋Š” ํƒœ๊ทธ๋ผ๋„ ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<img src = " " Alt = " " />

5.  ๊ด„ํ˜ธ () :

JSX๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋™์•ˆ HTML ์ฝ”๋“œ๊ฐ€ ๋‚ด๋ถ€์— ๋ž˜ํ•‘๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ด„ํ˜ธ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

* ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๋ถ€๋ชจ ์š”์†Œ ์‹œ์ž‘ ํƒœ๊ทธ๊ฐ€ return ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋Š” ๋™์ผํ•œ ์ค„์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6. style ์ ์šฉ์‹œ ๋ณ€์ˆ˜์— ๋‹ด์„ ๊ฒƒ

์ธ๋ผ์ธ ์Šคํƒ€์ผ์€ ์ ์šฉ์ด ๋˜์ง€ ์•Š์œผ๋‹ˆ, ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<span style="color: #409d00;">์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ ์šฉ X</span>

 

const style=
    {color: #FFFFFF;
     backgroundColor: #000000; }
return(
            <div style={style}>์ด๋ ‡๊ฒŒ ์ ์šฉํ•ด์•ผ๋Œ</div>
         );

7. ์ฃผ์„

{/* ์ฃผ์„1 */} ์ค‘๊ด„ํ˜ธ๋ฅผ ๋ฌถ์–ด ์‚ฌ์šฉ(์—ฌ๋Ÿฌ์ค„๋„ ๊ฐ€๋Šฅ)
// ์ฃผ์„2 

8. Javascript ๊ฐ’ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ์—๋Š” { }๋ฅผ ์‚ฌ์šฉ

JSX ๋‚ด๋ถ€์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜๋ฅผ ๋ณด์—ฌ์ค„ ๋•Œ๋Š” { }์œผ๋กœ ๊ฐ์‹ธ์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ถœ์ฒ˜ ๋ฐ ์ฐธ๊ณ ์ž๋ฃŒ

https://linuxhint.com/what-is-difference-between-js-and-jsx/#:~:text=JS%20is%20simply%20a%20scripting,easier%20to%20understand%20for%20users.

 

What is the difference between JS and JSX

A Javascript Developer & Linux enthusiast with 4 years of industrial experience and proven know-how to combine creative and usability viewpoints resulting in world-class web applications. I have experience working with Vue, React & Node.js & currently work

linuxhint.com

https://medium.com/nerd-for-tech/jsx-rules-in-react-a-javascript-framework-4b0ab66fdbf9

 

JSX Rules in React(A JavaScript Framework):

We always works according to some rules in our life. Everywhere you want to go you will face some rules to follow. I have come across some…

medium.com