Front-end/react

[React] React Element, Component

year.number 2022. 8. 7. 22:35

React Element

๐Ÿ’ก ๋ฆฌ์•กํŠธ ์•ฑ๋“ค์˜ ๊ฐ€์žฅ ์ž‘์€ building block์ด๋‹ค

 

  • React element๋Š” DOM element์˜ ๊ฐ€์ƒํ‘œํ˜„์ด๋‹ค
  • React element๋Š” ํ™”๋ฉด์— ๋ณด์ด๋Š” ๊ฒƒ๋“ค์„ ๊ธฐ์ˆ ํ•œ๋‹ค
  • React element๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์กด์žฌํ•œ๋‹ค(๋ถˆ๋ณ€์„ฑ์˜ ํŠน์ง•์„ ๊ฐ€์ง)

 

const element = <h1>Hello, World</h1>;

 

์‹คํ–‰๋  ๋•Œ createElement() -> React element ์ƒ์„ฑ -> DOM element ์ƒ์„ฑ๋œ๋‹ค


React element ํŠน์ง•

React element๋Š” ๋ถˆ๋ณ€์„ฑ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค

์ฆ‰, element ์ƒ์„ฑ ํ›„ ์ž์‹์ด๋‚˜ ์†์„ฑ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค(์—…๋ฐ์ดํŠธ ํ•˜๋ ค๋ฉด element๋ฅผ ์žฌ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค)

 

๋ฆฌ์•กํŠธ์˜ ์žฅ์  ์ค‘ ๋น ๋ฅธ ๋žœ๋”๋ง ์†๋„๋Š” virtual DOM์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

 

/* Root DOM Node */

<div id="root></div>

 

Root DOM Node์— element ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ๋ฒ•

*๋ Œ๋”๋ง: virtual DOM์—์„œ ์‹ค์ œ DOM์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ

 

const element = <h1>Hi, React! </h1>;
ReactDOM.render(element, document.getElementById('root'));

 

 

 

 


React Component

๐Ÿ’ก React๋Š” component ๊ธฐ๋ฐ˜์ด๋‹ค
     ๋ ˆ๊ณ  ์กฐ๋ฆฝํ•˜๋“ฏ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋ชจ์•„์„œ ๊ฐœ๋ฐœํ•œ๋‹ค

 

 

props(์ž…๋ ฅ) -> React component -> React element(์ถœ๋ ฅ)

 

 


props(property)

๐Ÿ’ก ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•  ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด


props ํŠน์ง•

  • ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค(Read-only)
  • pureํ•จ์ˆ˜ ๊ฐ™์€ ์—ญํ• ์„ ํ•ด์•ผํ•œ๋‹ค
pure ํ•จ์ˆ˜ impure ํ•จ์ˆ˜
์ž…๋ ฅ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ , ๊ฐ™์€ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ ํ•ญ์ƒ ๊ฐ™์€ ์ถœ๋ ฅ๊ฐ’์„ ๊ฐ€์ง ์ž…๋ ฅ๊ฐ’์ด ๋ณ€๊ฒฝ๋จ

์ปดํฌ๋„ŒํŠธ์˜ ์ข…๋ฅ˜

  • Function Component(Hook)
  • class Component

 

์ปดํฌ๋„ŒํŠธ ์ข…๋ฅ˜ ๋น„๊ตํ•˜๊ธฐ
// Function Component

function Welcome(props) {
   return <h1>Hi, {props.name}</h1>;
}
// class Component

class Welcome extends React.Components {
   render() {
      return<h1>Hi, {this.props.name}</h1>;
   }
}

 

๐Ÿ’ก ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„์€ "๋Œ€๋ฌธ์ž"๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค
     (์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉด DOM ํƒœ๊ทธ๋กœ ์ธ์‹ํ•œ๋‹ค ex. div, span, ...)

์ปดํฌ๋„ŒํŠธ ๋žœ๋”๋ง

function Welcome(props) {
   return <h1>Hi, {props.name}</h1>;
}


const element = <Welcome name="์—ฐ์ˆ˜" />;
ReactDOM.render(
   element,
   document.getElementById('root')
);

 

1. "์—ฐ์ˆ˜"๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํ•˜๋Š” render ํ•จ์ˆ˜ ํ˜ธ์ถœ

2. name์ด "์—ฐ์ˆ˜"์ธ element ์ƒ์„ฑ

3. ์‹ค์ œ DOM์— ์—…๋ฐ์ดํŠธ

4. ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ž„