[React] ๐Ÿ“š ๋ฆฌ์•กํŠธ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๊ณผ ์ปดํฌ๋„ŒํŠธ ์†Œ๊ฐœ

pyeonneยท2022๋…„ 6์›” 13์ผ
0
post-thumbnail

๐Ÿ“‹ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ

๐Ÿ“Œ JSX

  • JSX๋Š” HTML๋ณด๋‹ค๋Š” JavaScript์— ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์—, ReactDOM์€ HTML ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ด๋ฆ„ ๋Œ€์‹  camelCase ํ”„๋กœํผํ‹ฐ ๋ช…๋ช… ๊ทœ์น™์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, JSX์—์„œ class๋Š” className๊ฐ€ ๋˜๊ณ , for๋Š” htmlFor๊ฐ€ ๋œ๋‹ค.
  • ํƒœ๊ทธ๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด XML์ฒ˜๋Ÿผ />๋ฅผ ์ด์šฉํ•ด ๋ฐ”๋กœ ๋‹ซ์•„์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • JSX ํ‘œํ˜„์‹์„ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , JSX ์ž์ฒด๊ฐ€ ํ‘œํ˜„์‹์ด๊ธฐ ๋•Œ๋ฌธ์— return() ๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง

  • return() ๋ฌธ ๋‚ด์—์„œ๋Š” if-else ๊ตฌ๋ฌธ ๋Œ€์‹  ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • return() ๋ฌธ ๋‚ด์—์„œ๋Š” if ๊ตฌ๋ฌธ ๋Œ€์‹  ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

    JavaScript์—์„œ true && expression์€ ํ•ญ์ƒ expression์œผ๋กœ ํ‰๊ฐ€๋˜๊ณ , false && expression์€ ํ•ญ์ƒ false๋กœ ํ‰๊ฐ€๋œ๋‹ค. ๋”ฐ๋ผ์„œ && ๋’ค์˜ ์—˜๋ฆฌ๋จผํŠธ๋Š” ์กฐ๊ฑด์ด true์ผ ๋•Œ ์ถœ๋ ฅ๋˜๊ณ , false๋ผ๋ฉด React๋Š” ๋ฌด์‹œํ•˜๊ณ  ๊ฑด๋„ˆ๋›ด๋‹ค. ํ•˜์ง€๋งŒ, falsy ํ‘œํ˜„์‹์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด && ๋’ค์— ์žˆ๋Š” ํ‘œํ˜„์‹์€ ๊ฑด๋„ˆ๋›ฐ์ง€๋งŒ, flasy ํ‘œํ˜„์‹์ด ๋ฐ˜ํ™˜๋œ๋‹ค.


๐Ÿ“Œ Components

// ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

// ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ
class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

๐Ÿ“Œ Props

  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ props๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
  • props๋Š” ๊ฐ์ฒด๋‹ค.
  • props๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๋‹ค.
    • ๋ชจ๋“  React ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์˜ props๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋ฐ˜๋“œ์‹œ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค.
  • props์˜ ๊ฐ’์ด ์—†๋‹ค๋ฉด true๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.
  • Destructuring์„ ํ•˜๋ฉด props๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋„˜๊ฒจ์ค„ ๊ฐ’๋“ค์„ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด Destructuring ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
function App() {
  const info = {
    firstName: "Hana",
    lastName: "Jeong",
    withImg: true,
  };
  return (
    <div className="App">
      <Header title={"Learn React A"} />
      <Welcome {...info} />
    </div>
  );
}

๐Ÿ“Œ props.children

  • props.children์€ ์ปดํฌ๋„ŒํŠธ์˜ ์—ฌ๋Š” ํƒœ๊ทธ์™€ ๋‹ซ๋Š” ํƒœ๊ทธ ์‚ฌ์ด์˜ ๋‚ด์šฉ์„ ํฌํ•จํ•œ๋‹ค.

props.children ํ™œ์šฉ

  1. ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ผ๋ฐ˜์ ์ธ html ํƒœ๊ทธ์˜ ๊ตฌ์กฐ์™€ ๋น„์Šทํ•œ ๊ฒฝ์šฐ
export default function Button(props) {
	return <button onClick={props.handleClick}>{props.children}</button>
}

<Button onClick={() => alert("submit")}>์ œ์ถœํ•˜๊ธฐ</Button>
  1. ์ปดํฌ๋„ŒํŠธ์— ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ props.children์œผ๋กœ ๋„˜๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ผ๋ฐ˜์ ์ด๋‹ค.

๐Ÿ”— ์ฐธ๊ณ  ๋ž˜ํผ๋Ÿฐ์Šค

profile
๊ฑด๊ฐ•ํ•œ ๋ชธ๊ณผ ๋งˆ์Œ์—์„œ ๊ฑด๊ฐ•ํ•œ ์ฝ”๋“œ๊ฐ€ ํƒœ์–ด๋‚œ๋‹ค !

0๊ฐœ์˜ ๋Œ“๊ธ€