Study_Develop/React

JSXλž€?

hiijihyun 2023. 8. 14. 16:09
λ°˜μ‘ν˜•

JSX λž€?

 

- JSX(JavaScript XML)λŠ” js 에 xml을 μΆ”κ°€ν•œ ν™•μž₯ 문법이닀.

 

- JSXλŠ” λ¦¬μ•‘νŠΈλ‘œ ν”„λ‘œμ νŠΈλ₯Ό κ°œλ°œν•  λ•Œ μ‚¬μš©λ˜λ―€λ‘œ 곡식적인 μžλ°”μŠ€ν¬λ¦½νŠΈ 문법은 μ•„λ‹ˆλ‹€.

 

- λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰ν•˜κΈ° 전에 바벨을 μ‚¬μš©ν•˜μ—¬ 일반 jsν˜•νƒœμ˜ μ½”λ“œλ‘œ λ³€ν™˜λœλ‹€.

 

// μ‹€μ œ μž‘μ„±ν•  JSX μ˜ˆμ‹œ
function App() {
	return (
      <h1>Hello, GodDaeHee!</h1>
    );
}

// μœ„μ™€ 같이 μž‘μ„±ν•˜λ©΄, 바벨이 λ‹€μŒκ³Ό 같이 μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ ν•΄μ„ν•˜μ—¬ μ€€λ‹€.
function App() {
	return React.createElement("h1", null, "Hello, GodDaeHee!");
}

 

- JSXλŠ” ν•˜λ‚˜μ˜ νŒŒμΌμ— μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ HTML을 λ™μ‹œμ— μž‘μ„±ν•˜μ—¬ νŽΈλ¦¬ν•˜λ‹€.

 

JSX 문법

 

1. λ°˜λ“œμ‹œ λΆ€λͺ¨ μš”μ†Œ ν•˜λ‚˜κ°€ κ°μ‹ΈλŠ” ν˜•νƒœμ—¬μ•Ό ν•œλ‹€.

 

 - Virtual DOMμ—μ„œ μ»΄ν¬λ„ŒνŠΈ λ³€ν™”λ₯Ό 감지할 λ•Œ 효율적으둜 비ꡐ할 수 μžˆλ„λ‘ μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€λŠ” ν•˜λ‚˜μ˜ Dom트리 ꡬ쑰둜 이루어져야 ν•œλ‹€λŠ” κ·œμΉ™μ΄ μžˆλ‹€.

 

2. μžλ°”μŠ€ν¬λ¦½νŠΈ ν‘œν˜„μ‹

 

- JSX μ•ˆμ—μ„œλ„ JSν‘œν˜„μ‹μ„ μ‚¬μš©ν•  수 μžˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ ν‘œν˜„μ‹μ„ μž‘μ„±ν•˜λ €λ©΄ JSXλ‚΄λΆ€μ—μ„œ μ½”λ“œλ₯Ό {}둜 감싸주면 λœλ‹€.

 

- μœ νš¨ν•œ λͺ¨λ“  JSν‘œν˜„μ‹μ„ 넣을 수 μžˆλ‹€.

 

3. if(for λ¬Έ) λŒ€μ‹  μ‚Όν•­ μ—°μ‚°μž μ‚¬μš©

 

- if ꡬ문과 for λ£¨ν”„λŠ” jsν‘œν˜„μ‹μ΄ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— jsx λ‚΄λΆ€ μžλ°”μŠ€ν¬λ¦½νŠΈ ν‘œν˜„μ‹μ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†λ‹€.

 

- κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 쑰건뢀에 따라 λ‹€λ₯Έ λ Œλ”λ§ μ‹œ jsxμ£Όλ³€ μ½”λ“œμ—μ„œ if문을 μ‚¬μš©ν•˜κ±°λ‚˜, {}μ•ˆμ—μ„œ μ‚Όν•­ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€.

 

3.1 μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•˜κΈ°

 

function App() {
	let desc = '';
	const loginYn = 'Y';
	if(loginYn === 'Y') {
		desc = <div>GodDaeHee μž…λ‹ˆλ‹€.</div>;
	} else {
		desc = <div>λΉ„νšŒμ› μž…λ‹ˆλ‹€.</div>;
	}
	return (
		<>
			{desc}
		</>
	);
}

 

3.2 λ‚΄λΆ€μ—μ„œ μ‚¬μš©

 

function App() {
	const loginYn = 'Y';
	return (
		<>
			<div>
				{loginYn === 'Y' ? (
					<div>GodDaeHee μž…λ‹ˆλ‹€.</div>
				) : (
					<div>λΉ„νšŒμ› μž…λ‹ˆλ‹€.</div>
				)}
			</div>
		</>
	);
}

 

3.3 AND μ—°μ‚°μž (&&) μ‚¬μš©

// 쑰건이 λ§Œμ‘±ν•˜μ§€ μ•Šμ„ 경우 아무것도 λ…ΈμΆœλ˜μ§€ μ•ŠλŠ”λ‹€.
function App() {
	const loginYn = 'Y';
	return (
		<>
			<div>
				{loginYn === 'Y' && <div>GodDaeHee μž…λ‹ˆλ‹€.</div>}
			</div>
		</>
	);
}

 

3.4 μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜ μ‚¬μš©

function App() {
	const loginYn = 'Y';
	return (
		<>
			{
			  (() => {
				if(loginYn === "Y"){
				  return (<div>GodDaeHee μž…λ‹ˆλ‹€.</div>);
				}else{
				  return (<div>λΉ„νšŒμ› μž…λ‹ˆλ‹€.</div>);
				}
			  })()
			}
		</>
	);
}

 

4. Ract DOM은 HTML μ–΄νŠΈλ¦¬λ·°νŠΈ 이름 λŒ€μ‹  camelCase ν”„λ‘œνΌν‹° λͺ…λͺ… κ·œμΉ™ μ‚¬μš©

 

4.1 JSX μŠ€νƒ€μΌλ§

 

- JSXμ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ λ¬Έλ²•을 μ“°λ €λ©΄ {}λ₯Ό μ¨μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—, μŠ€νƒ€μΌμ„ μ μš©ν•  λ•Œμ—λ„ κ°μ²΄ ν˜•νƒœλ‘œ λ„£μ–΄ μ£Όμ–΄μ•Ό ν•œλ‹€.

 

- 카멜 ν‘œκΈ°λ²•μœΌλ‘œ μž‘μ„±ν•΄μ•Ό ν•œλ‹€. (font-size => fontSize)

 

4.2 class λŒ€μ‹  className

 

- μΌλ°˜ HTMLμ—μ„œ CSS ν΄λž˜μŠ€λ₯Ό μ‚¬μš©ν•  λ•Œμ—λŠ” class λΌλŠ” μ†μ„±μ„ μ‚¬μš©ν•œλ‹€.


- JSXμ—μ„œλŠ” classκ°€ μ•„λ‹Œ className 을 μ‚¬μš©ν•œλ‹€.

 

5. JSX λ‚΄μ—μ„œ 주석 μ‚¬μš© 방법

 

- jsx λ‚΄μ—μ„œ {/* ...*/} 와 같은 ν˜•μ‹μœΌλ‘œ μ‚¬μš©

 

function App() {
	return (
		<>
			{/* μ£Όμ„μ‚¬μš©λ°©λ²• */}
			<div>Hello, GodDaeHee!</div>
		</>
	);
}

 

- μ‹œμž‘ νƒœκ·Έλ₯Ό μ—¬λŸ¬μ€„ μž‘μ„± μ‹œμ—λŠ” , λ‚΄λΆ€μ—μ„œ //의 ν˜•μ‹μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

 

function App() {
	return (
		<>
			<div
			// μ£Όμ„μ‚¬μš©λ°©λ²•
			>Hello, GodDaeHee!</div>
		</>
	);
}