๐Ÿ“ ์ปดํฌ๋„ŒํŠธ

์ปดํฌ๋„ŒํŠธ(Component) : ์•ฑ์˜ ๊ธฐ๋Šฅ์„ ๋‹จ์œ„๋ณ„๋กœ ์บก์Šํ™”ํ•˜๋Š” React์˜ ๊ธฐ๋ณธ ๋‹จ์œ„

HTML ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค์™€ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋„ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ, ์ปดํฌ๋„ŒํŠธ๋Š” ๋…๋ฆฝ์ ์ด๊ณ , ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์˜ ์กฐ๊ฐ์ด๋‹ค.

์ปดํฌ๋„ŒํŠธ์˜ ์ข…๋ฅ˜๋กœ๋Š”, 1. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ, 2. ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค.

 

๐Ÿ’ก ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ

๊ฐ„๋‹จํ•œ ์˜ˆ๋กœ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ๋ฅผ ๋ณด์ž.

function Introduce() {
return <h2>Hi, I am elice!</h2>;
}
ReactDOM.render(<Introduce />, document.getElementById('root'));

๐Ÿ’ก ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์•ฝ๊ฐ„ ๊ตฌ์กฐ๋งŒ ๋‹ค๋ฅธ ์ •๋„๋‹ค.
๋‹ค๋งŒ, class ์„ ์–ธ ์‹œ, React.Component์˜ ๋ฉ”์†Œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด, extends๋ฅผ ์ด์šฉํ•ด, React.Component๋ฅผ ์ƒ์†
render( ) ํ•จ์ˆ˜์•ˆ์—, ๋ฐ˜ํ™˜ ํ• , HTML ์š”์†Œ๋ฅผ return ์œผ๋กœ ๋ฐ˜ํ™˜
๊ฐ„๋‹จํ•œ ์˜ˆ๋กœ, ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ๋ฅผ ๋ณด์ž.

class Introduce extends React.Component {
render() {
return <h2>Hi, I am elice!</h2>;
}
}
ReactDOM.render(<Introduce />, document.getElementById('root'));

 

๐Ÿ’ก ์ด ๋‘˜์€ ๊ฐ๊ฐ, ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€ ?

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ

  • ๋‹จ์ˆœํžˆ HTML UI๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋‹จ์ˆœํžˆ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ , ๋ Œ๋”๋ง ํ•˜๋ฉด ๋์ด์ง€ ๋•Œ๋ฌธ์—, ๋น„์ƒํƒœํ˜• ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ ๋„ ํ•œ๋‹ค.

ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ

  • ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋Š”, "์ƒํƒœ(State)"๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ, "์ƒํƒœ(State)"๋ž€, React์˜ State๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ์ปดํฌ๋„ŒํŠธ์˜ ํ˜„์žฌ ์ €์žฅ๋œ ๊ฐ’
  • ์ด๋Ÿฐ, "์ƒํƒ€(State)"๋ฅผ ๊ฐ€์ง€๋Š”, ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ฅผ, ๋‹ค๋ฅธ ๋ง๋กœ, ์ƒํƒœํ˜• ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • HTML์„ ๋ฐ˜ํ™˜ํ•˜๋Š” render( ) ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด, ๋ณต์žกํ•œ UI ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํŠนํžˆ, State๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋ฐ˜๋“œ์‹œ(?) ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌํ˜„์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜, ๊ธฐ์ˆ ์ด ๋ฐœ๋‹ฌ ๋˜๋ฉด์„œ, ์ด์ œ๋Š”, ์‚ฌ์‹ค, ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ, ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋˜, ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ(State)๋ฅผ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , ๊ทธ๋Ÿฌํ•œ ๊ธฐ์ˆ ์„ ์šฐ๋ฆฌ๋Š”, "ํ›…(hook)" ์ด๋ผ๊ณ ํ•œ๋‹ค.

์ด๊ฒƒ์€, ๋’ค์—์„œ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ( ์•„์ฃผ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ ! )

๊ทธ๋ฆฌ๊ณ , ์š”์ฆ˜์€ ์‚ฌ์‹ค, ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ณด๋‹จ, hook์„ ์ด์šฉํ•œ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ React๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ถ”์„ธ๋ผ๊ณ  ํ•œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

'WEB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JS] spread  (0) 2021.03.22
[JS] ๋ฐฐ์—ด ๋‚ด์žฅํ•จ์ˆ˜  (0) 2021.03.22
[React] JSX ๋ฌธ๋ฒ• ๋ฐ ๋ Œ๋”๋ง  (0) 2021.02.06
[React] ๊ฐœ์š” & JS์™€ ์ฐจ์ด์   (0) 2021.02.03
[JS] DOM,Event,Node๊ฐ์ฒด  (0) 2021.02.03

+ Recent posts