Front/React.js

[React] ๋Œ“๊ธ€ ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘ (Component & Props)

ddo04 2024. 8. 26. 02:03

๐Ÿ–จ๏ธ Component

  • ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐ๋ผ๋Š” ์ค‘์š”ํ•œ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋˜ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ์˜ ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ
  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ผ์›Œ ๋งŸ์ถฐ์„œ ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐœ๋ฐœ

์—์–ด๋น„์—”๋น„ ํ™ˆํŽ˜์ด์ง€

  • ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ „์ฒด ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด ์ž์—ฐ์Šค๋ ˆ ๊ฐœ๋ฐœ ์‹œ๊ฐ„๊ณผ ์œ ์ง€ ๋ณด์ˆ˜ ๋น„์šฉ๋„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

๋ฆฌ์•กํŠธ ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ณผ ์ถœ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜์™€ ๋น„์Šท
  • React ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ์€ ์–ด๋– ํ•œ ์†์„ฑ๋“ค์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„์„œ ๊ทธ์— ๋งž๋Š” ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌํ„ด
  • React ์ปดํฌ๋„ŒํŠธ๋Š” ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๋Œ€๋กœ props. ์ฆ‰ ์†์„ฑ์„ ๋„ฃ์œผ๋ฉด ํ•ด๋‹น ์†์„ฑ์— ๋งž์ถฐ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚  ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ

๐Ÿ–จ๏ธ Props

  • ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์ž…๋ ฅ
  • Props๋Š” prop ๋’ค์— ๋ณต์ˆ˜ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” s๋ฅผ ๋ถ™์—ฌ์„œ props์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒƒ์„ ์˜๋ฏธ
  • prop์€ property ์ค„์—ฌ์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ    
  • ๋ฆฌ์•กํŠธ์—์„œ๋Š” React ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ์„ ๋‚˜ํƒ€๋ƒ„

์œ„์— ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์€ ์—ฌํ–‰ํ•  ์ง€์—ญ์„ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ์œผ๋ฉฐ ๋ชจ๋‘ ๋ชจ์„œ๋ฆฌ๊ฐ€ ๋‘ฅ๊ทผ ์‚ฌ๊ฐํ˜• ๋ชจ์–‘์— ์ƒ๋‹จ์—๋Š” ๊ทธ๋ฆผ์ด ๋ฐฐ๊ฒฝ์œผ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๊ณ  ํ•˜๋‹จ์—๋Š” ์ƒ‰๊น”๋กœ ๋œ ๋ฐฐ๊ฒฝ๊ณผ ๊ธ€์ž๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ํ˜•ํƒœ์ด์ง€๋งŒ ์•ˆ์— ๋“ค์–ด ์žˆ๋Š” ๊ทธ๋ฆผ๊ณผ ์ƒ‰์ƒ, ๊ธ€์ž, ๊ฑฐ๋ฆฌ ๋“ฑ์€ ๋‹ค

  • ๊ฐ™์€ React ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ˆˆ์— ๋ณด์ด๋Š” ๊ธ€์ž๋‚˜ ์ƒ‰๊น” ๋“ฑ์˜ ์†์„ฑ์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์† ์žฌ๋ฃŒ
  • ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•  ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด
  • ์ปดํฌ๋„ŒํŠธ์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ชจ์Šต์˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•˜๊ณ  ์‹ถ์„ ๋•Œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํ”„๋ž์Šค์— ๋„ฃ์–ด์„œ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•จ

๐Ÿ–จ๏ธ Props ํŠน์ง•

  • Read-Only
    • ์ฝ๊ธฐ ์ „์šฉ
    • ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ
    • ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑ

๐Ÿ–จ๏ธ JavaScript ํ•จ์ˆ˜์˜ ์†์„ฑ

// pure
function sum(a, b) {
	return a + b;
}

// impure
function withdraw(accout, amount) {
	account.total -= amount;
}
  •  pure
    • ํ•จ์ˆ˜๊ฐ€ ์ˆœ์ˆ˜
    • ์ž…๋ ฅ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐ™์€ ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•ด์„œ๋Š” ํ•ญ์ƒ ๊ฐ™์€ ์ถœ๋ ฅ๊ฐ’์„ ๋ฆฌํ„ด
  • impure
    • ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ํŒŒ๋ผ๋ฏธํ„ฐ account์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ
    • ํ•จ์ˆ˜๊ฐ€ ์ˆœ์ˆ˜ํ•˜์ง€ ์•Š
  •  ๋ชจ๋“  ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ทธ๋“ค์˜ Props์— ๊ด€ํ•ด์„œ๋Š” Pure ํ•จ์ˆ˜ ๊ฐ™์€ ์—ญํ• ์„ ํ•ด์•ผ ํ•จ
  •  ๋ชจ๋“  ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” Props๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ , ๊ฐ™์€ Props์— ๋Œ€ํ•ด์„œ๋Š” ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค„ ๊ฒƒ

๐Ÿ–จ๏ธ Props ์‚ฌ์šฉ๋ฒ•

function App(props){
	return (
    	<profile
        	name="๋„ํฌ"
            introduction="์•ˆ๋…•ํ•˜์„ธ์š”, ๋„ํฌ์ž…๋‹ˆ๋‹ค"
            ViewCount={1500}
        />
    );
}
  • name๊ณผ introduction์— ๋“ค์–ด๊ฐ„ ๋ฌธ์ž์—ด์€ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ณ  viewCount์— ๋“ค์–ด๊ฐ„ ์ •์ˆ˜๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•จ 
  • JSX์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šธ ๋•Œ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌด์กฐ๊ฑด JavaScript ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ๋ฐฐ์› ์Œ
  • JSX๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ‚ค์™€ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํ‚ค๊ฐ’์ƒ์˜ ํ˜•ํƒœ๋กœ ์ปดํฌ๋„ŒํŠธ์— Props๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ
  • ๊ฐ ์†์„ฑ์— ๊ฐ’์„ ๋„ฃ์„ ๋•Œ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒƒ์˜ ์ฐจ์ด
  • Props์— ๊ฐ’์„ ๋„ฃ์„ ๋•Œ์—๋„ ๋ฌธ์ž์—ด ์ด์™ธ์— ์ •์ˆ˜, ๋ณ€์ˆ˜ ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ๋“ฑ์ด ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ์—๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์‹ธ์ฃผ์–ด์•ผ ํ•จ
  • ๋ฌธ์ž์—ด๋„ ์ค‘๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๋„ ์ƒ๊ด€์—†์Œ
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด ์†์„ฑ์˜ ๊ฐ’๋“ค์ด ๋ชจ๋‘ ํ”„๋กœํ•„ ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ ์ „๋‹ฌ๋˜๋ฉฐ props๋Š” ์ด์™€ ๊ฐ™์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๊ฐ€ ๋จ
{
	name: "๋„ํฌ",
    introduction: "์•ˆ๋…•ํ•˜์„ธ์š”, ๋„ํฌ์ž…๋‹ˆ๋‹ค."
    viewCount: 1500
}
  • props์˜ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด props์˜ ๊ฐ’์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ
function App(props){
	return (
    	<Layout
        	width={2560}
          	height={1440}
            header={
            	<Header title="๋„ํฌ์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค"/>
            }
            footer={
            	<Footer />
            }
       />
    );
}
  • ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ๋Š” ์ •์ˆ˜ ๊ฐ’์„ ๊ฐ€์ง„ width, height๊ณผ react ์—˜๋ฆฌ๋จผํŠธ๋กœ header, footer๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋จ
  • JSX๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ปดํฌ๋„ŒํŠธ์— props๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ

์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

๐Ÿ–จ๏ธ Function Component

function Welcome(props) {
	return <h1>์•ˆ๋…•, {props.name}</h1>;
}
  • ํ•˜๋‚˜์˜ Props ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์„œ React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฆฌํ„ด
  • ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ์žฅ์ ์œผ๋กœ ๊ฐ€์ง

๐Ÿ–จ๏ธ Class Component

class Welcome extends React.Component {
	render() {
    	return <h1>์•ˆ๋…•, {this.props.name}</h1>
    }
}
  • JavaScript ES6์˜ Class๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ํ˜•ํƒœ์˜ ์ปดํฌ๋„ŒํŠธ
  • React์˜ ๋ชจ๋“  ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋Š” React.Component๋ฅผ ์ƒ์†๋ฐ›์•„ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ
  • React.Component๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์„œ Welcome์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ ๊ฒฐ๊ณผ์ ์œผ๋กœ React ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋˜๋Š” ๊ฒƒ

๐Ÿ–จ๏ธ Component ์ด๋ฆ„

// HTML div ํƒœ๊ทธ๋กœ ์ธ์‹
const element = <div />

// Welcome์ด๋ผ๋Š” ๋ฆฌ์•กํŠธ Component๋กœ ์ธ์‹
const element = <Welcome name="์ธ์ œ" />
  • ์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฆ„์€ ํ•ญ์ƒ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•จ
  • React๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ DOMํƒœ๊ทธ๋กœ ์ธ์‹
  • div๋‚˜ span๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋‚ด์žฅ ์ปดํฌ๋„ŒํŠธ๋ผ๋Š” ๊ฒƒ์„ ๋œปํ•˜๋ฉฐ div๋‚˜ span๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ react.createElement์— ์ „๋‹ฌ
  • ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” FOO์™€ ๊ฐ™์ด ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” React.createElement foo ํ˜•ํƒœ๋กœ ์ปดํŒŒ์ผ๋˜๋ฉฐ JavaScript ํŒŒ์ผ ๋‚ด์—์„œ ์ •์˜ํ–ˆ๊ฑฐ๋‚˜ ์ž„ํฌํŠธํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ด

๐Ÿ–จ๏ธ Component ๋ Œ๋”๋ง

// DOM ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ element
const element = <div />;

// ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ Component๋ฅผ ์‚ฌ์šฉํ•œ element
const element = <Welcome name="์ธ์ œ" />;
function Welcome(props) {
	return <h1>์•ˆ๋…•, {props.name}</h1>;
}

const element = <Welcome name="์ธ์ œ" />;
ReactDOM.render(
	element,
    document.getElementById('root')
);
  • ๋ฆฌ์•กํŠธ๋Š” welcome ์ปดํฌ๋„ŒํŠธ์— name ์ธ์žฌ๋ผ๋Š” props๋ฅผ ๋„ฃ์–ด์„œ ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋กœ ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ ์ƒ์„ฑ
  • ์—˜๋ฆฌ๋จผํŠธ๋Š” ์ตœ์ข…์ ์œผ๋กœ ๋ฆฌ์•กํŠธ ๋”์„ ํ†ตํ•ด ์‹ค์ œ ๋”์— ํšจ๊ณผ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋จ

๐Ÿ–จ๏ธ Component ํ•ฉ์„ฑ

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • ๋ณต์žกํ•œ ํ™”๋ฉด์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Component๋กœ ๋‚˜๋ˆ ์„œ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•ฉ์ณ์„œ ๋˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์ด๋ผ๊ณ  ํ•จ
  • ์›น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฃจํŠธ๋กœ ํ•ด์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์กด์žฌํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋ฆฌ์•กํŠธ๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ์•ฑ์˜ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ
  • ๊ธฐ์กด์— ์žˆ๋˜ ์›นํŽ˜์ด์ง€์— ๋ฆฌ์•กํŠธ๋ฅผ ์—ฐ๋™ํ•œ๋‹ค๋ฉด ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

๐Ÿ–จ๏ธ Component ์ถ”์ถœ

  • ๋ณต์žกํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ชผ๊ฐœ์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ
  • ํฐ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ผ๋ถ€๋ฅผ ์ถ”์ถœํ•ด์„œ ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ๋œป
  • ์ปดํฌ๋„ŒํŠธ์˜ ์ถ”์ถœ์„ ์ž˜ ํ™œ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ฆ๊ฐ€
  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž‘์•„์งˆ์ˆ˜๋ก ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋Šฅ๊ณผ ๋ชฉ์ ์ด ๋ช…ํ™•ํ•ด์ง€๊ณ  ํ”„๋ž์Šค๋„ ๋‹จ์ˆœํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™•๋ฅ ์ด ๋†’์•„์ง€๊ธฐ ๋•Œ๋ฌธ์ž„
  • ์žฌ ์‚ฌ์šฉ์„ฑ์ด ์˜ฌ๋ผ๊ฐ์œผ๋กœ์จ ๋™์‹œ์— ๊ฐœ๋ฐœ ์†๋„๋„ ํ–ฅ์ƒ
  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์–ด๋А ์ •๋„ ์ˆ˜์ค€๊นŒ์ง€ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„์ง€์— ๋Œ€ํ•ด ์ •ํ•ด์ง„ ๊ธฐ์ค€์€ ์—†์Œ
  • ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ณ  ๋‚˜์ค‘์— ๊ณง๋ฐ”๋กœ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŽ์ด ๊ฐ–๊ณ  ์žˆ์„์ˆ˜๋ก ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋นจ๋ผ์ง

๐Ÿ–จ๏ธ ๋Œ“๊ธ€ ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ

  • ์ž‘์„ฑ์ž ์ด๋ฆ„๊ณผ ๋Œ“๊ธ€ ๋‚ด์šฉ์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด props๋ฅผ ์ถ”๊ฐ€
  • ์ž‘์„ฑ์ž ์ด๋ฆ„๊ณผ ๋Œ“๊ธ€ ๋‚ด์šฉ์ด ์ฝ”๋“œ ์ƒ์— ๋ฐ•ํ˜€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์ ์œผ๋กœ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ
  • ์ž‘์„ฑ์ž ์ด๋ฅด๊ณผ ๋Œ“๊ธ€ ๋‚ด์šฉ์„ props.name๊ณผ props.comment ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ
  •  props๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก comment ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ด ํ™”๋ฉด๊ณผ ๊ฐ™์ด ์•„๋ฌด๋Ÿฐ ๋‚ด์šฉ๋„ ๋‚˜์˜ค์ง€ ์•Š์Œ
  • name๊ณผ comment์˜ ๊ฐ’์ด ์ •์˜๋˜์ง€ ์•Š์•„์„œ undefined์ด๋ผ ์•„๋ฌด๊ฒƒ๋„ ๋‚˜์˜ค์ง€ ์•Š์Œ
  • comment list ์ปดํฌ๋„ŒํŠธ์—์„œ ํ™”๋ฉด์— ํ‘œ์‹œ๋œ ๋ถ€๋ถ„์ฒ˜๋Ÿผ props๋ฅผ ์ถ”๊ฐ€
  • ์ˆ˜์ •ํ•˜๋ฉด ์ปค๋ฉ˜ํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ํ”„๋ž์Šค๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ ๋„ค์ž„๊ณผ ์ปค๋ฉ˜ํŠธ ๊ฐ’์ด ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด์šฉ์ด ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ
  • ๋Œ“๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋™์ ์œผ๋กœ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝ 
  • JavaScript ๋ฐฐ์—ด์˜ map ํ•จ์ˆ˜๋ฅผ ์จ์„œ ๊ฐ ๋Œ“๊ธ€ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ comment ์ปดํฌ๋„ŒํŠธ๋ฅผ returnํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ

 

๊ณต๋ถ€ํ•œ ์ž๋ฃŒ

https://www.inflearn.com/course/%EC%B2%98%EC%9D%8C-%EB%A7%8C%EB%82%9C-%EB%A6%AC%EC%95%A1%ED%8A% B8/dashboard

 

[์ง€๊ธˆ ๋ฌด๋ฃŒ] ์ฒ˜์Œ ๋งŒ๋‚œ ๋ฆฌ์•กํŠธ(React) ๊ฐ•์˜ | Inje Lee (์†Œํ”Œ) - ์ธํ”„๋Ÿฐ

Inje Lee (์†Œํ”Œ) | ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ CSS ๊ธฐ์ดˆ ๋ฌธ๋ฒ•๊ณผ ํ•จ๊ป˜ ๋ฆฌ์•กํŠธ์˜ ๊ธฐ์ดˆ๋ฅผ ํƒ„ํƒ„ํ•˜๊ฒŒ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ๊น”๋”ํ•œ ๊ฐ•์˜์ž๋ฃŒ, ๊ผผ๊ผผํ•œ ์„ค๋ช…์œผ๋กœ์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๋Š” ๋ฆฌ์•กํŠธ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. ๐Ÿ‘จ‍๐Ÿซ ๋ฆฌ์•กํŠธ์˜ ์„ธ๊ณ„๋กœ

www.inflearn.com