Search
Duplicate

JSX

JSX

JavaScript + (XML/HTML)
Reactμ—μ„œ μ‚¬μš©λ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν™•μž₯ λ¬Έλ²•μœΌλ‘œ, XML λ˜λŠ” HTMLκ³Ό μœ μ‚¬ν•œ ꡬ쑰λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. JSXλ₯Ό μ‚¬μš©ν•˜λ©΄ React μš”μ†Œλ₯Ό μ’€ 더 κ°„νŽΈν•˜κ²Œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” Reactμ—μ„œ UIλ₯Ό ν‘œν˜„ν•˜λŠ” 데에 주둜 μ‚¬μš©λ˜λ©°, μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ 내에 λ§ˆν¬μ—…μ„ μž‘μ„±ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

λ™μž‘

JSX λ¬Έλ²•μœΌλ‘œ μž‘μ„±ν•˜λŠ” μ½”λ“œλŠ” React 의 createElement ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” JavaScript μ½”λ“œλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.
JSX JavaScript 둜 λ³€ν™˜ React μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό 생성 가상 DOM μ‹€μ œ DOM

문법사항

1.
ν•˜λ‚˜μ˜ 루트 μ—˜λ¦¬λ¨ΌνŠΈ
2.
μš”μ†Œ (Element)
3.
ν‘œν˜„μ‹ (Expression)
4.
속성 μ‚¬μš©
5.
JSX λ‚΄λΆ€μ˜ 쑰건문
6.
JSX λ‚΄λΆ€μ˜ 반볡문
7.
μŠ€νƒ€μΌ 적용
a.
인라인 μŠ€νƒ€μΌ 방식
b.
클래슀 μ§€μ • 방식
8.
주석

ν•˜λ‚˜μ˜ 루트 μ—˜λ¦¬λ¨ΌνŠΈ

μ΅œμƒμœ„(루트) μ—˜λ¦¬λ¨ΌνŠΈλŠ” ν•˜λ‚˜λ‘œ, μžμ‹ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό κ°μ‹Έμ•Όν•œλ‹€.
μž‘μ„±λœ μ½”λ“œκ°€ 가상 DOM 으둜 μƒμ„±λ˜μ–΄μ•Όν•˜λŠ”λ°, 가상 DOM 은 νŠΈλ¦¬κ΅¬μ‘°μ΄λ‹€. νŠΈλ¦¬κ΅¬μ‘°λŠ” μ΅œμƒμœ„ λ…Έλ“œμΈ λ£¨νŠΈκ°€ 1개둜 이루어져 μžˆλ‹€. λ”°λΌμ„œ, 가상 DOM νŠΈλ¦¬κ΅¬μ‘°μ— 맞게 μ΅œμƒμœ„ μ—˜λ¦¬λ¨ΌνŠΈκ°€ 1개둜 μ œκ³΅λ˜μ–΄μ•Όν•œλ‹€.
JSX 둜 μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μž‘μ„±ν•œ μ½”λ“œλŠ” React κ°€ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μƒμ„±ν•˜λŠ” μ½”λ“œ(React.createElement)둜 λ³€ν™˜ν•©λ‹ˆλ‹€. κ·Έ ν›„ λ Œλ”λ§ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄, μ»΄ν¬λ„ŒνŠΈλ₯Ό κΈ°λ³Έ ꡬ쑰둜 λ Œλ”λ§ ν•©λ‹ˆλ‹€. μ΄λ•Œ React λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό κΈ°λ³Έ ꡬ쑰둜 Virtual DOM 을 μƒμ„±ν•©λ‹ˆλ‹€.
React 의 Virtual DOM 은 각 μ»΄ν¬λ„ŒνŠΈ ν•˜λ‚˜λ₯Ό ν•˜λ‚˜μ˜ λ…Έλ“œλ‘œ ν•˜μ—¬ 트리 ꡬ쑰둜 κ΄€λ¦¬ν•©λ‹ˆλ‹€. 이 λ•Œλ¬Έμ—, 가상 DOM 에 μƒμ„±ν•˜κΈ° μœ„ν•΄μ„œ 트리 ꡬ쑰 ν˜•νƒœλ‘œ μ΅œμƒμœ„μ˜ ν•˜λ‚˜μ˜ λ…Έλ“œλ₯Ό κ°€μ§„ ν˜•νƒœλ‘œ μ œκ³΅λ˜μ–΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— μ—˜λ¦¬λ¨ΌνŠΈ 듀을 ν•˜λ‚˜μ˜ 루트 μ—˜λ¦¬λ¨ΌνŠΈλ‘œ κ°μ‹Έμ„œ μž‘μ„±ν•΄μ•Όν•©λ‹ˆλ‹€.
트리 κ΅¬μ‘°μ—μ„œ λ£¨νŠΈλŠ” 트리의 μ‹œμž‘ 지점이며, 각 λ…Έλ“œλŠ” ν•˜μœ„ λ…Έλ“œλ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. Reactκ°€ μ»΄ν¬λ„ŒνŠΈ 트리λ₯Ό 효과적으둜 κ΄€λ¦¬ν•˜κ³  μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•΄μ„œλŠ” 트리의 μ‹œμž‘μ μ΄ λ˜λŠ” 루트 μ—˜λ¦¬λ¨ΌνŠΈκ°€ ν•„μš”ν•©λ‹ˆλ‹€.
Reactμ—μ„œλŠ” μ»΄ν¬λ„ŒνŠΈμ˜ λ°˜ν™˜κ°’μœΌλ‘œ μ—¬λŸ¬ 개의 루트 μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό 직접 λ°˜ν™˜ν•˜λŠ” 것이 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ°˜ν™˜λ˜λŠ” JSXλŠ” ν•˜λ‚˜μ˜ 루트 μ—˜λ¦¬λ¨ΌνŠΈλ‘œ 감싸져 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
μœ„μ˜ 잘λͺ»λœ μ˜ˆμ‹œμ—μ„œμ²˜λŸΌ μ—¬λŸ¬ 루트 μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό 직접 λ°˜ν™˜ν•˜λ©΄ Reactκ°€ μ»΄ν¬λ„ŒνŠΈ 트리λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ²˜λ¦¬ν•  수 μ—†μ–΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•˜λ‚˜μ˜ λΆ€λͺ¨ μ—˜λ¦¬λ¨ΌνŠΈλ‘œ 감싸야 ν•©λ‹ˆλ‹€.

ν”„λž˜κ·Έλ¨ΌνŠΈ (Fragment)

μ—¬λŸ¬ μš”μ†Œλ₯Ό κ·Έλ£Ήν™”ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” νŠΉμˆ˜ν•œ ν˜•νƒœμ˜ μ»΄ν¬λ„ŒνŠΈ
React 16.2.0 버전뢀터 λ„μž…

문법

<></>
JavaScript
볡사
<React.Fragment></React.Fragment>
JavaScript
볡사
function MyComponent() { return ( <> <h1>Title</h1> <p>Paragraph content</p> </> ); }
JavaScript
볡사
function MyComponent() { return ( <React.Fragment> <h1>Title</h1> <p>Paragraph content</p> </React.Fragment> ); }
JavaScript
볡사
Fragmentλ₯Ό μ‚¬μš©ν•˜λ©΄ λΆ€λͺ¨ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μΆ”κ°€λ‘œ μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ μ—¬λŸ¬ 개의 μžμ‹ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό κ·Έλ£Ήν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 특히 λΆˆν•„μš”ν•œ DOM μš”μ†Œλ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  가독성을 λ†’μ΄κ³ μž ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
λͺ…μ‹œμ μœΌλ‘œ React.Fragmentλ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œν˜„ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€

<></> vs <div></div>

: ν”„λž˜κ·Έλ¨ΌνŠΈ(Fragment) 둜 묢은 κ²½μš°λŠ” μ‹€μ œλ‘œ λΆ€λͺ¨ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μƒμ„±ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
β€’
<></> μ‚¬μš©
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Fragment</title> </head> <body> <h1>Title</h1> <p>Paragraph content</p> </body> </html>
JavaScript
볡사
β€’
<div></div> μ‚¬μš©
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>div</title> </head> <body> <div> <h1>Title</h1> <p>Paragraph content</p> </div> </body> </html>
JavaScript
볡사

μ—˜λ¦¬λ¨ΌνŠΈ (Element)

λΈŒλΌμš°μ €μ— 컨텐츠λ₯Ό ν‘œν˜„ν•˜λŠ” ν•˜λ‚˜μ˜ λ‹¨μœ„
μ—˜λ¦¬λ¨ΌνŠΈλŠ” Reactμ—μ„œ μ»΄ν¬λ„ŒνŠΈκ°€ μ‹€μ œλ‘œ λΈŒλΌμš°μ €μ— λ‚˜νƒ€λ‚΄λŠ” λ‚΄μš©μ„ ν‘œν˜„ν•˜λŠ” λ‹¨μœ„μž…λ‹ˆλ‹€. Reactμ—μ„œ μ—˜λ¦¬λ¨ΌνŠΈλŠ” μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ μ‚¬μš©λ˜λ©°, 각 μ—˜λ¦¬λ¨ΌνŠΈλŠ” 가상 DOM (Virtual DOM)μ—μ„œ μ»΄ν¬λ„ŒνŠΈμ˜ μΈμŠ€ν„΄μŠ€μ— λŒ€μ‘ν•©λ‹ˆλ‹€.
JSXμ—μ„œλŠ” λͺ¨λ“  μ—˜λ¦¬λ¨ΌνŠΈμ— λŒ€ν•΄ μ’…λ£Œ νƒœκ·Έλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.
(HTMLμ—μ„œλŠ” λͺ‡λͺ‡ νƒœκ·Έμ—μ„œ λ‹«λŠ” νƒœκ·Έκ°€ μƒλž΅λ˜μ–΄λ„ μœ νš¨ν•©λ‹ˆλ‹€.)
HTML 인 경우 OK
<input type="text" name="test">
HTML
볡사
React 인 경우 ERROR
<input type="text" name="test">
HTML
볡사
React 인 경우
<input type="text" name="test" />
HTML
볡사
μ’…λ£Œ 의미λ₯Ό κ°€μ§€λŠ” / λ₯Ό λ°›λ“œμ‹œ λͺ…μ‹œν•΄μ•Όν•œλ‹€.

μ—˜λ¦¬λ¨ΌνŠΈμ˜ 생성

React μ—˜λ¦¬λ¨ΌνŠΈλŠ” JavaScript ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜μ—¬ μƒμ„±λ©λ‹ˆλ‹€. JSX 문법을 μ‚¬μš©ν•˜λ©΄ HTMLκ³Ό μœ μ‚¬ν•œ λ¬Έλ²•μœΌλ‘œ React μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
const element = <h1>Hello, World!</h1>;
JavaScript
볡사

μ—˜λ¦¬λ¨ΌνŠΈμ˜ νŠΉμ§•

React μ—˜λ¦¬λ¨ΌνŠΈλŠ” 가상 DOMμ—μ„œ μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœ 변화에 따라 μ—…λ°μ΄νŠΈλ˜κ³ , Reactκ°€ 이λ₯Ό 효율적으둜 μ²˜λ¦¬ν•˜μ—¬ μ‹€μ œ DOM에 λ³€κ²½ 사항을 μ΅œμ†Œν™”ν•©λ‹ˆλ‹€.
const element = <p>{new Date().toLocaleTimeString()}</p>;
JavaScript
볡사

μ—˜λ¦¬λ¨ΌνŠΈμ˜ λ Œλ”λ§

React μ—˜λ¦¬λ¨ΌνŠΈλŠ” ReactDOM.render()λ‚˜ μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ” λ©”μ†Œλ“œ 등을 톡해 μ‹€μ œ DOM에 λ Œλ”λ§λ©λ‹ˆλ‹€.
ReactDOM.render(element, document.getElementById('root'));
JavaScript
볡사

μ—˜λ¦¬λ¨ΌνŠΈμ˜ κ΅¬μ„±μš”μ†Œ

β€’
컨텐츠
β—¦
ν…μŠ€νŠΈ
β—¦
μžμ‹ μ—˜λ¦¬λ¨ΌνŠΈ
β€’
속성

μ—˜λ¦¬λ¨ΌνŠΈμ— ν…μŠ€νŠΈ μ»¨ν…μΈ λ§Œ ꡬ성

const element = <h1>Hello, World!</h1>;
JavaScript
볡사

μ—˜λ¦¬λ¨ΌνŠΈμ— μžμ‹ μ—˜λ¦¬λ¨ΌνŠΈ ꡬ성

const element = ( <div> <h1>Title</h1> <p>Paragraph content</p> </div> );
JavaScript
볡사

μ—˜λ¦¬λ¨ΌνŠΈ 속성

JSXμ—μ„œλŠ” HTMLκ³Ό μœ μ‚¬ν•œ 속성을 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ λͺ‡ κ°€μ§€ 차이가 μžˆμŠ΅λ‹ˆλ‹€.

html κ³Ό 차이가 μžˆλŠ” React μ—˜λ¦¬λ¨ΌνŠΈ 속성

1.
class 속성
2.
style 속성

class 속성

JSXμ—μ„œλŠ” HTML의 class 속성을 className으둜 μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λŠ” JavaScriptμ—μ„œ classλŠ” μ˜ˆμ•½μ–΄μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
// HTML <div class="my-class">Hello</div> // JSX <div className="my-class">Hello</div>
HTML
볡사

style 속성

HTMLμ—μ„œλŠ” style 속성에 λ¬Έμžμ—΄λ‘œ CSSλ₯Ό μ§€μ •ν–ˆμ§€λ§Œ, JSXμ—μ„œλŠ” 객체 ν˜•νƒœλ‘œ μŠ€νƒ€μΌμ„ μ§€μ •ν•©λ‹ˆλ‹€.
// HTML <div style="color: red; font-size: 16px;">Hello</div> // JSX <div style={{ color: 'red', fontSize: '16px' }}>Hello</div>
HTML
볡사

ν‘œν˜„μ‹ (Expression)

{ } 기호λ₯Ό μ‚¬μš©ν•΄μ„œ, JavaScript 의 μˆ˜μ‹, λ³€μˆ˜, ν•¨μˆ˜ 등을 μ‚¬μš©ν•  수 μžˆλŠ” 문법
.JSX λ‚΄μ—μ„œ μ€‘κ΄„ν˜Έ {}λ₯Ό μ‚¬μš©ν•˜μ—¬ JavaScript ν‘œν˜„μ‹μ„ μ‚½μž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ ν‘œν˜„μ‹μ€ λ™μ μœΌλ‘œ 값을 μƒμ„±ν•˜κ±°λ‚˜ λ³€μˆ˜, ν•¨μˆ˜ 등을 μ‚¬μš©ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
import React from 'react'; import ReactDOM from 'react-dom'; // λ³€μˆ˜ μ„ μ–Έ const name = 'aloha'; // ν•¨μˆ˜ μ •μ˜ const formatName = (name) => { return name.toUpperCase(); }; // JSXλ₯Ό 직접 λ Œλ”λ§ const element = ( <div> {/* λ³€μˆ˜ μ‚¬μš© */} <p>Hello, {name}!</p> {/* ν•¨μˆ˜ 호좜 */} <p>Formatted Name: {formatName(name)}</p> {/* μ‚°μˆ  μ—°μ‚° */} <p>2 + 2 = {2 + 2}</p> </div> ); // JSX λ Œλ”λ§ ReactDOM.render(element, document.getElementById('root'));
JavaScript
볡사

JSX λ‚΄λΆ€μ˜ 쑰건문

JSX μ•ˆμ—μ„œλŠ” 일반적인 JavaScript의 if, switch 문을 직접 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λŒ€μ‹ μ— JSX λ‚΄μ—μ„œλŠ” JavaScript ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜μ—¬ 쑰건뢀 λ Œλ”λ§μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€. 주둜 쑰건뢀 μ—°μ‚°μž(μ‚Όν•­ μ—°μ‚°μž)λ‚˜ 논리 μ—°μ‚°μžλ₯Ό ν™œμš©ν•˜μ—¬ 쑰건뢀 λ Œλ”λ§μ„ κ΅¬ν˜„ν•©λ‹ˆλ‹€.
쑰건에 λ”°λΌμ„œ 좜λ ₯ λ˜λŠ” 미좜λ ₯ ν•΄μ•Όν•  μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.
1.
쑰건뢀 μ—°μ‚°μž(μ‚Όν•­ μ—°μ‚°μž)
2.
AND 논리 μ—°μ‚°μž&&
3.
OR 논리 μ—°μ‚°μž ||

쑰건뢀 μ—°μ‚°μž(μ‚Όν•­ μ—°μ‚°μž)

const X = ❓; const element = ( <div> { X ? <p>A</p> : <p>B</p>} </div> );
JavaScript
볡사
β€’
X κ°€ true 일 λ•Œ <p>A</p> λ°˜ν™˜
β€’
X κ°€ false, null, undefined, 0, NaN , β€˜β€™ 일 λ•Œ <p>B</p> λ°˜ν™˜

AND 논리 μ—°μ‚°μž&&

const hasPermission = ❓; const element = ( <div> {hasPermission && <p>Permission granted!</p>} </div> );
JavaScript
볡사
β€’
μ™Όμͺ½ ν”Όμ—°μ‚°μžκ°€ true 일 λ•Œ, 였λ₯Έμͺ½ ν”Όμ—°μ‚°μž λ°˜ν™˜
β€’
μ™Όμͺ½ ν”Όμ—°μ‚°μžκ°€ false, null, undefined, 0, NaN , β€˜β€™ 일 λ•Œ 좜λ ₯

OR 논리 μ—°μ‚°μž ||

const isGuest = true; const element = ( <div> {isGuest || <p>Welcome, Guest!</p>} </div> );
JavaScript
볡사
β€’
μ™Όμͺ½ ν”Όμ—°μ‚°μžκ°€ false, null, undefined, 0, NaN , β€˜β€™ 아닐 λ•Œ μ™Όμͺ½ ν”Όμ—°μ‚°μž λ°˜ν™˜
β€’
μ™Όμͺ½ ν”Όμ—°μ‚°μžκ°€ false, null, undefined, 0, NaN , β€˜β€™ 일 λ•Œ 였λ₯Έμͺ½ ν”Όμ—°μ‚°μž λ°˜ν™˜

JSX λ‚΄λΆ€μ˜ 반볡문

JSX λ‚΄λΆ€μ—μ„œ λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•  λ•ŒλŠ”, 주둜 배열을 map() ν•¨μˆ˜λ‘œ λ°˜λ³΅ν•˜μ—¬ κ΅¬ν˜„ν•˜κ³  κ²°κ³Όλ₯Ό ν‘œν˜„μ‹ { } μž‘μ„±ν•œλ‹€.
JSX λ‚΄λΆ€μ—μ„œλŠ” for 문을 μ‚¬μš©ν•  수 μ—†λ‹€.
for 문을 κΌ­ μ‚¬μš© ν•΄μ•Ό ν•œλ‹€λ©΄, ν•¨μˆ˜λ₯Ό μ •μ˜ν•΄μ„œ κ²°κ³Όλ₯Ό λ°˜ν™˜λ°›κ³  ν‘œν˜„μ‹μœΌλ‘œ XML/HTML 을 좜λ ₯ν•΄μ£Όλ©΄ λœλ‹€.
const numbers = [1, 2, 3, 4, 5]; const listItems = numbers.map((number) => ( <li key={number.toString()}>{number}</li> )); const element = ( <div> <h2>Number List</h2> <ul>{listItems}</ul> </div> );
JavaScript
볡사
μœ„μ˜ μ½”λ“œμ—μ„œ map() ν•¨μˆ˜λŠ” numbers λ°°μ—΄μ˜ 각 μš”μ†Œμ— λŒ€ν•΄ μƒˆλ‘œμš΄ <li> μš”μ†Œλ₯Ό μƒμ„±ν•˜κ³ , 이λ₯Ό listItems 배열에 μ €μž₯ν•©λ‹ˆλ‹€. 그리고 이 listItems 배열을 JSX λ‚΄μ—μ„œ {} μ€‘κ΄„ν˜Έλ‘œ κ°μ‹Έμ„œ λ Œλ”λ§ν•©λ‹ˆλ‹€.
λ°˜λ³΅λ˜λŠ” μš”μ†Œλ“€μ—λŠ” κ³ μœ ν•œ key 속성을 μ œκ³΅ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. 이것은 Reactκ°€ 각 μš”μ†Œλ₯Ό μ‹λ³„ν•˜κ³  관리할 수 있게 λ„μ™€μ£ΌλŠ”λ°, 보톡 각 ν•­λͺ©μ˜ κ³ μœ ν•œ μ‹λ³„μžλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
μœ„μ˜ μ½”λ“œμ—μ„œλŠ” key={number.toString()}λ₯Ό μ‚¬μš©ν•˜μ—¬ 각 숫자λ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ κ³ μœ ν•œ ν‚€λ₯Ό μƒμ„±ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
이와 같은 λ°©μ‹μœΌλ‘œ 배열을 μˆœνšŒν•˜λ©΄μ„œ JSX μš”μ†Œλ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

key 속성

: JSX μ•ˆμ—μ„œ λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜μ—¬ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” 경우, 각 μ—˜λ¦¬λ¨ΌνŠΈμ— key 속성을 μ§€μ •ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
일반적으둜 key 속성에 λ°°μ—΄μ˜ 각 ν•­λͺ©μ„ μ‹λ³„ν•˜λŠ” κ³ μœ ν•œ 값을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
각 μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλŠ” key κ°€ μžˆμ–΄μ•Ό, μ—˜λ¦¬λ¨ΌνŠΈ 간에 λ³€ν™”λ₯Ό κ°μ§€ν•˜κ³  효율적으둜 μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ°°μ—΄μ˜ index λ₯Ό key μ†μ„±μ˜ κ°’μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것은 ꢌμž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
μΈλ±μŠ€λŠ” λ°°μ—΄ λ‚΄μ—μ„œμ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ°’μœΌλ‘œ, ν•­λͺ©μ΄ μΆ”κ°€λ˜κ±°λ‚˜ μ‚­μ œλ  λ•Œ 변경될 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 인덱슀λ₯Ό key둜 μ‚¬μš©ν•˜λ©΄ κ³ μœ μ„±μ΄ 보μž₯λ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
const data = [ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }, { id: 3, name: 'Item 3' }, ]; const listItems = data.map(item => ( <li key={item.id}>{item.name}</li> ));
JavaScript
볡사
μ΄λ ‡κ²Œ ν•˜λ©΄ 각 ν•­λͺ©μ€ κ³ μœ ν•œ idλ₯Ό κ°€μ§€κ³  있기 λ•Œλ¬Έμ— Reactκ°€ μ—˜λ¦¬λ¨ΌνŠΈ 간에 λ³€ν™”λ₯Ό 효율적으둜 감지할 수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€νƒ€μΌ 적용

1.
인라인 μŠ€νƒ€μΌ 방식
2.
클래슀 μ§€μ • 방식

인라인 μŠ€νƒ€μΌ 방식

인라인 μŠ€νƒ€μΌμ€ HTML μ—˜λ¦¬λ¨ΌνŠΈμ˜ style 속성을 μ‚¬μš©ν•˜μ—¬ μŠ€νƒ€μΌμ„ 직접 μ •μ˜ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. 이 방식은 ν•΄λ‹Ή μ—˜λ¦¬λ¨ΌνŠΈμ—λ§Œ μ μš©λ˜λŠ” μŠ€νƒ€μΌμ„ μ •μ˜ν•  수 μžˆμ–΄ μœ μ—°ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€νƒ€μΌμ€ JavaScript 객체의 ν˜•νƒœλ‘œ μž‘μ„±λ˜λ©°, 객체의 μ†μ„±μœΌλ‘œ μŠ€νƒ€μΌ 속성을 μ§€μ •ν•©λ‹ˆλ‹€.
β€’
문법
style={ { μŠ€νƒ€μΌμ†μ„±1 : 'κ°’', μŠ€νƒ€μΌμ†μ„±2 : 'κ°’' } }
JavaScript
볡사
β€’
style 속성 내에 μ€‘κ΄„ν˜Έ { } λ₯Ό μ‚¬μš©ν•˜μ—¬ JavaScript 객체λ₯Ό μƒμ„±ν•˜κ³ , 객체의 μ†μ„±μœΌλ‘œ μŠ€νƒ€μΌμ„ μ§€μ •ν•©λ‹ˆλ‹€.
β€’
객체 { } 둜 μ§€μ •ν•œ μŠ€νƒ€μΌμ„ ν‘œν˜„μ‹μœΌλ‘œ { } 좜λ ₯ν•©λ‹ˆλ‹€.
β€’
CSS μ—μ„œλŠ” μŠ€νƒ€μΌ 속성λͺ…을 β€˜-’ μΌ€λ°₯ μΌ€μ΄μŠ€(kebab-case)μž‘μ„±ν•˜μ§€λ§Œ, JSX μ—μ„œλŠ” μŠ€νƒ€μΌ 속성λͺ…을 카멜 μΌ€μ΄μŠ€(CamelCase)둜 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.
const element = ( <div style={{ color: 'blue', fontSize: '16px', backgroundColor: 'lightgray' }}> This is a text with inline styles. </div> );
JavaScript
볡사

클래슀 μ§€μ • 방식

클래슀 μ§€μ • 방식은 CSS 클래슀λ₯Ό 미리 μ •μ˜ν•˜κ³ , ν•΄λ‹Ή 클래슀λ₯Ό HTML μ—˜λ¦¬λ¨ΌνŠΈμ— μ μš©ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. 이 방식은 μ—¬λŸ¬ μ—˜λ¦¬λ¨ΌνŠΈμ— λ™μΌν•œ μŠ€νƒ€μΌμ„ μ μš©ν•˜κ±°λ‚˜, μ „μ—­ μŠ€νƒ€μΌ μ‹œνŠΈλ₯Ό ν™œμš©ν•  λ•Œ νš¨κ³Όμ μž…λ‹ˆλ‹€.
β€’
styles.css
.customClass { color: red; font-size: 18px; background-color: lightyellow; }
CSS
볡사
μŠ€νƒ€μΌ μ‹œνŠΈ 파일의 이름에 λŒ€ν•œ κ΄€μŠ΅μ€ 주관적이며, ν”„λ‘œμ νŠΈλ‚˜ νŒ€μ˜ κ·œμΉ™μ— 따라 λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 일반적으둜 React ν”„λ‘œμ νŠΈμ—μ„œλŠ” styles.css와 같이 λ³΅μˆ˜ν˜•μœΌλ‘œ λͺ…λͺ…ν•˜λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€.
β€’
Test.jsx
// React μ»΄ν¬λ„ŒνŠΈμ—μ„œ 클래슀 적용 import React from 'react'; import './styles.css'; const element = ( <div className="customClass"> This is a text with styles applied using a CSS class. </div> );
JavaScript
볡사
JSXμ—μ„œλŠ” HTML의 class 속성을 className으둜 μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λŠ” JavaScriptμ—μ„œ classλŠ” μ˜ˆμ•½μ–΄μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

주석

JSX 주석은 JavaScript XML (JSX) μ½”λ“œ λ‚΄μ—μ„œ 주석을 μΆ”κ°€ν•˜λŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. JSX 주석은 λΈŒλΌμš°μ €μ— λ Œλ”λ§λ˜μ§€ μ•Šκ³ , μ†ŒμŠ€ μ½”λ“œμ˜ 가독성을 ν–₯μƒμ‹œν‚€κ³  μ½”λ“œμ— μ„€λͺ…을 μΆ”κ°€ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
1.
ν•œ 쀄 주석
2.
μ—¬λŸ¬ 쀄 주석

ν•œ 쀄 주석

const element = ( <div> {/* 이 뢀뢄은 화면에 λ‚˜νƒ€λ‚˜μ§€ μ•ŠλŠ” ν•œ 쀄 μ£Όμ„μž…λ‹ˆλ‹€. */} <p>Hello, World!</p> </div> );
JavaScript
볡사
μœ„μ˜ μ˜ˆμ œμ—μ„œ {/* ... */}λŠ” ν•œ 쀄 주석을 λ‚˜νƒ€λ‚΄λ©°, 이 뢀뢄은 화면에 λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ—¬λŸ¬ 쀄 주석

const element = ( <div> {/* μ—¬λŸ¬ 쀄 μ£Όμ„μ˜ μ˜ˆμ‹œμž…λ‹ˆλ‹€. μ—¬λŸ¬ μ€„λ‘œ 주석을 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. */} <p>Hello, World!</p> </div> );
JavaScript
볡사
μ—¬λŸ¬ 쀄 주석은 {/* ... */} μ•ˆμ— μ—¬λŸ¬ μ€„μ˜ 주석을 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
JSX 주석은 React μ—˜λ¦¬λ¨ΌνŠΈ λ‚΄λΆ€μ—μ„œ μ‚¬μš©λ˜λ©°, 컴파일되면 λΈŒλΌμš°μ €μ—λŠ” ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 주석은 주둜 μ½”λ“œμ˜ νŠΉμ • 뢀뢄에 λŒ€ν•œ μ„€λͺ…μ΄λ‚˜, μž„μ‹œμ μΈ μ½”λ“œ λΉ„ν™œμ„±ν™” λ“±μ˜ μš©λ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.