let's get IT with DAVINA ๐ป
JSX ๋ณธ๋ฌธ
About JSX
- React์์ UI๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ผ๋ก, JavaScript๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ (JavaScript XML) ⇒ ์ด ๋ฌธ๋ฒ์ ์ด์ฉํด์ React ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ๊ทธ๋์ HTML์์๋ฅผ ๋ง๋ค๊ณ , JS๋ฅผ ์ค์ ํ ๋ค, ๋ค์ HTML์ ํด๋น ์ค์ ๋ด์ฉ์ ๋ฐ์ํ๋ค๊ณ ํ๋ค๋ฉด, React JSX๋ JS๋ก ์์๋ฅผ ๋ง๋ค๊ณ ๋ง์ง๋ง์ HTML์ ์ ๋ฐ์ดํธ/๋ฐ์ํด์ค๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ๋ก ์คํํ ์ ์๋ JS์ฝ๋๋ ์๋๋๋ค. “Bable”์ ํตํด JSX๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ JS๋ก ์ปดํ์ผ ํ, JS๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ๊ณ ํ๋ฉด์ ๋ ๋๋ง ํฉ๋๋ค.
DOM ๊ทธ๋ฆฌ๊ณ React JSX
- CSS&JSX ๋ฌธ๋ฒ๋ง์ ๊ฐ์ง๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
- ์ฆ, ์ปดํฌ๋ํธ ํ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ํ์ํ ํ์ผ์ด ์ค๊ณ , ํ ๋์ ์ปดํฌ๋ํธ ํ์ธ ๊ฐ๋ฅ!
- JSX๋ฅผ ์ฌ์ฉํ๋ฉด JS๋ง์ผ๋ก ๋งํฌ์ ํํ์ ์ฝ๋๋ฅผ ์์ฑํ์ฌ DOM์ ๋ฐฐ์น
- HTML๊ณผ ๋น์ทํ ๋ฌธ๋ฒ์ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋์์ด๋์์ ํ์ ์ ํธ๋ฆฌํฉ๋๋ค.
Why JSX?
- ํ ๋์ ๋ณผ ์ ์๋ ๊ธฐ๋ฅ๊ณผ ๋์์ธ
- ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ง ๋ณด๋๊ฒ ์๋ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ๋์ต๋๋ค.
- ๊ตฌ์กฐ์ ๋์์ ๋ํ ์ฝ๋๋ฅผ ํ ๋ญ์น๋ก ์ ์ ์ฝ๋์ → ์ปดํฌ๋ํธ
//React without JSX
return React.createElement(
"h1", null, `Hello, ${formatName(user)}!`
//React with JSX -> ๋ณต์ก์ฑ ์ค๊ณ , ๊ฐ๋
์ฑ ๋์ด๊ธฐ
return <h1>Hello, {formatName(user)}!</h1>;
JSX ํ์ฉ ๊ท์น
- ํ๋์ element ์์ ๋ชจ๋ elements๊ฐ ํฌํจ (์ต์์์์ opening tag & closing tag๋ก ๊ฐ์ธ๊ธฐ)
- element class ์ฌ์ฉ ์, className์ผ๋ก ํ๊ธฐ (class๋ก ์์ฑ ํ๋ฉด html ํด๋์ค ์์ฑ ๋์ , js ํด๋์ค๋ก ๋ฐ์๋ค์ด๊ธฐ ๋๋ฌธ์ ์ฃผ์)
- JS ๊ธฐ๋ณธ ๋ฌธ๋ฒ ์ฌ์ฉ ๊ฐ๋ฅ → JavaScript ํํ์ ์ฌ์ฉ ์, ์ค๊ดํธ{} ์ด์ฉ (๊ทธ๋ ์ง ์์ผ๋ฉด, ์ผ๋ฐ ํ
์คํธ๋ก ์ธ์)
- ex. {๋ณ์๋ช , ํจ์ ๋ฑ}
โญ๏ธ ํจ์ : ํ์ดํ ํจ์ ํํ์์ผ๋ก ์ ์ธ๋์์ ๋, {function}์ด ์๋ {function()}์ผ๋ก ํธ์ถํ์ผ๋ก ์จ์ฃผ์
-
- JSX์์ style์์ฑ ์ง์ด ๋ฃ์ ๋ : style = {object ์๋ฃํ์ผ๋ก ๋ง๋ ์คํ์ผ}
- {{color: "blue}}
- JSX์์ style์์ฑ ์ง์ด ๋ฃ์ ๋ : style = {object ์๋ฃํ์ผ๋ก ๋ง๋ ์คํ์ผ}
- ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ๋ ๋๋ฌธ์๋ก ์์ (PascalCase) (์๋ฌธ์๋ก ์์์, ์ผ๋ฐ์ ์ธ HTML ์๋ฆฌ๋จผํธ๋ก ์ธ์)
- ์ฌ๋ฌ ๊ฐ์ HTML ์๋ฆฌ๋จผํธ๋ฅผ ํ์ํ ๋, map()ํจ์๋ฅผ ์ด์ฉ
- ์ด๋, ๋ฐ๋์ "key" JSX ์์ฑ์ ๋ฃ์ด์ผ ํ๋ค!!
- ๊ทธ๋ ์ง ์์ผ๋ฉด, ๋ฆฌ์คํธ์ ๊ฐ ํญ๋ชฉ์ key๋ฅผ ๋ฃ์ด์ผ ํ๋ค๋ ๊ฒฝ๊ณ ๊ฐ ํ์๋จ!
- ์ด๋, key ์์ฑ์ ์์น๋ map method ๋ด๋ถ์ ์๋ ์ฒซ ์๋ฆฌ๋จผํธ์ ๋ฃ์ด์ค๋๋ค.
- key ์์ฑ๊ฐ์ ๊ฐ๋ฅํ๋ฉด ๋ฐ์ดํฐ์์ ์ ๊ณตํ๋ id๋ฅผ ํ ๋นํด์ผ ํฉ๋๋ค. (์์ ๊ฐ๋ฅํ๋ฉฐ ์ ์ผํด์ผ ํ๊ธฐ ๋๋ฌธ)
- ๊ณ ์ id๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฐฐ์ด index๋ฅผ ๋ฃ์ด์ ํด๊ฒฐ (BUT, this is as a last resort! ์ตํ์ ์๋จ์ผ๋ก๋ง..)
โ๏ธ -> ๊ณ ์ ํ id๊ฐ ์๋ index๋ฅผ key๋ก ์ฌ์ฉํ๋ค๋ฉด ์๋ก์ด ์์ดํ ์ด ๋งจ ์์ ๋ค์ด์ฌ ๊ฒฝ์ฐ index๊ฐ ํ๋์ฉ ๋ฐ๋ ค์ key๊ฐ ๋ค์ด๊ฐ ํ์ ๋ ธ๋๋ค์ ์ ๋ถ updateํด์ผํ๋ค.
'DEV_IN > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React๋ก TodoApp ๋ง๋ค๊ธฐ (2)Create ๊ธฐ๋ฅ ๊ฐ๋ฐ (2) | 2023.03.02 |
---|---|
React๋ก TodoApp ๋ง๋ค๊ธฐ (1)Setup (4) | 2023.03.02 |
What is React? (3) | 2023.02.21 |
ํน์ ๋ฒํผ์ ๋๋ ์ ๋๋ง, ์ด๋ฒคํธ ์ฃผ๊ธฐ (6) | 2023.02.17 |
prevent scroll event with MODAL (์คํฌ๋กค ๋ฐฉ์ง-๋ชจ๋ฌ์ฐฝ) (5) | 2023.02.17 |
Comments