Search

Element

์—˜๋ฆฌ๋จผํŠธ (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 ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, React ํ™•์žฅ ๋ฌธ๋ฒ•์ธ JSX ๋ฅผ ํ†ตํ•ด์„œ๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1.
React JavaScript ์ฝ”๋“œ
2.
JSX ์ฝ”๋“œ

React JavaScript ์ฝ”๋“œ

๋ฌธ๋ฒ•

React.createElement( type, props, chlidren);
JavaScript
๋ณต์‚ฌ
1.
type (ํƒ€์ž…)
โ€ข
์—˜๋ฆฌ๋จผํŠธ์˜ ํƒ€์ž…์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์„ฑํ•˜๋ ค๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ์ข…๋ฅ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์˜ˆ๋ฅผ ๋“ค์–ด, HTML ํƒœ๊ทธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ๋ฌธ์ž์—ด๋กœ ํƒœ๊ทธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: 'div', 'span', 'h1' ๋“ฑ.
โ€ข
์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
2.
props (์†์„ฑ)
โ€ข
์—˜๋ฆฌ๋จผํŠธ์— ๋ถ€์—ฌํ•  ์†์„ฑ(properties ๋˜๋Š” props)์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
โ€ข
๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ, ์†์„ฑ์€ ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ๋ ์ง€์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
3.
children (์ž์‹)
โ€ข
์—˜๋ฆฌ๋จผํŠธ์˜ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
โ€ข
ํ…์ŠคํŠธ, ๋‹ค๋ฅธ React ์—˜๋ฆฌ๋จผํŠธ, ๋˜๋Š” ๋ฐฐ์—ด๋กœ ์—ฌ๋Ÿฌ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ์ฝ”๋“œ1

const element = React.createElement('h1', null, 'Hello, World!');
JavaScript
๋ณต์‚ฌ
React.createElement ํ•จ์ˆ˜๋Š” React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
1.
์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ํƒ€์ž…์ด๋ฉฐ, ๋ฌธ์ž์—ด 'h1'์€ <h1> HTML ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
2.
๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ์†์„ฑ(properties ๋˜๋Š” props)์ด๋ฉฐ, null์€ ์†์„ฑ์ด ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
3.
์„ธ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ์ž์‹(children)์ด๋ฉฐ, 'Hello, World!'๋Š” <h1> ์—˜๋ฆฌ๋จผํŠธ ์•ˆ์— ํ…์ŠคํŠธ๋กœ ํ‘œ์‹œ๋  ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์˜ˆ์‹œ์ฝ”๋“œ2

const element = React.createElement( 'a', // type: ํƒœ๊ทธ ์ด๋ฆ„ ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ { href: 'https://www.example.com', // props: ์—˜๋ฆฌ๋จผํŠธ์— ๋ถ€์—ฌํ•  ์†์„ฑ target: '_blank', style: { color: 'blue' } }, 'https://wwwaloha.oopy.io/' // children: ์—˜๋ฆฌ๋จผํŠธ์˜ ์ž์‹ );
JavaScript
๋ณต์‚ฌ

JSX ์ฝ”๋“œ

React ์—˜๋ฆฌ๋จผํŠธ๋Š” JavaScript ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. JSX ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด HTML๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ•์œผ๋กœ React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ๋ฒ•

const element = <type prop="">childeren</h1>;
JavaScript
๋ณต์‚ฌ
1.
type (ํƒ€์ž…)
โ€ข
์—˜๋ฆฌ๋จผํŠธ์˜ ํƒ€์ž…์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์„ฑํ•˜๋ ค๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ์ข…๋ฅ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์˜ˆ๋ฅผ ๋“ค์–ด, HTML ํƒœ๊ทธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ๋ฌธ์ž์—ด๋กœ ํƒœ๊ทธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: 'div', 'span', 'h1' ๋“ฑ.
โ€ข
์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
2.
props (์†์„ฑ)
โ€ข
์—˜๋ฆฌ๋จผํŠธ์— ๋ถ€์—ฌํ•  ์†์„ฑ(properties ๋˜๋Š” props)์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
โ€ข
๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ, ์†์„ฑ์€ ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ๋ ์ง€์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
3.
children (์ž์‹)
โ€ข
์—˜๋ฆฌ๋จผํŠธ์˜ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
โ€ข
ํ…์ŠคํŠธ, ๋‹ค๋ฅธ React ์—˜๋ฆฌ๋จผํŠธ, ๋˜๋Š” ๋ฐฐ์—ด๋กœ ์—ฌ๋Ÿฌ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ์ฝ”๋“œ1

const element = <h1>Hello, World!</h1>;
JavaScript
๋ณต์‚ฌ

์˜ˆ์‹œ์ฝ”๋“œ2

const element = ( <a href="https://www.example.com" target="_blank" style={{ color: 'blue' }}> https://www.aloha.oopy.io/ </a> );
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
๋ณต์‚ฌ