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 ๋ด๋ถ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์๋ฅผ ๋ณด์ฌ์ค ๋๋ { }์ผ๋ก ๊ฐ์ธ์ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
์ถ์ฒ ๋ฐ ์ฐธ๊ณ ์๋ฃ
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
'FA > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
20220927 React์์ sweetalert2 ์ฌ์ฉํ๊ธฐ (0) | 2022.09.27 |
---|---|
22020926 React Hooks - useState, useEffect (0) | 2022.09.26 |
20220924 React์์ Dark๋ชจ๋ ์ ์ฉํ๊ธฐ (0) | 2022.09.24 |
220919 React ํ์ดํ, ์์ด์ฝ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ (0) | 2022.09.19 |
220917 ๋ฐฐ๊ฒฝ์์ ๋๋ค์ผ๋ก ์ด๋ฏธ์ง ๋์ค๊ฒ ํ๊ธฐ (0) | 2022.09.17 |