Home ๐ŸŠ 2022-08-09
Post
Cancel

๐ŸŠ 2022-08-09

๐Ÿ”ฅ ์˜ค๋Š˜ ์–ด๋””์— ๋„์ „ํ•ด๋ณด์…จ๊ณ , ๋ฌด์—‡์„ ๋ฐฐ์šฐ์…จ๋‚˜์š”?

๐ŸŒŠ ํ•™์Šตํ•˜์‹œ๋ฉด์„œ ๊ถ๊ธˆํ•˜์‹  ๋ถ€๋ถ„์ด๋‚˜, ์–ด๋ ค์› ๋˜ ์ ์€ ๋ญ˜๊นŒ์š”?

  • constructor์—์„œ this๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด this๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ฌธ๋ณด๋‹ค ๋จผ์ € super ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ทœ์น™์ด๊ณ  super๋Š” ๊ณง ๋ถ€๋ชจ ํด๋ž˜์Šค, ์ฆ‰ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ๋Š” React์˜ Component๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์ด๋‹ค.

  • super ๋ฉ”์„œ๋“œ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ props๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์•„๋„ ๋ฆฌ์•กํŠธ๋Š” props๋ฅผ ์„ธํŒ…ํ•ด์ค€๋‹ค. ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด์—์„œ this.props๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด super(props)๋กœ props๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๐ŸŒŸ ๋‚ด์ผ์€ ์–ด๋–ป๊ฒŒ ํ•ด๋ณด๊ณ  ์‹ถ์œผ์„ธ์š”?

  • react์˜ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ ์•Œ์•„๋ณด๊ธฐ

์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋˜๋‹ค๋ฅธ ๋ฐฉ๋ฒ• : ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ

๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•

  • ๐Ÿ”– ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ธ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ๐Ÿ”– ์ตœ๊ทผ์˜ ๊ธฐ๋ณธ๊ฐ’์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋˜์ง€๋งŒ ๋ฆฌ์•กํŠธ 16.8์ด์ „์—๋Š” state์™€ side effect๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋‹ค.
  • ๐Ÿ”– ๋ฆฌ์•กํŠธ 16.8์—์„œ ๋ฆฌ์•กํŠธ ํ›…์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋„์ž…๋˜์–ด ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์—์„œ๋งŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ state์™€ side effect๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ํ›…์ด๋ผ๋Š”๊ฑด ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ๐Ÿ”– React.Component render()๋ฉ”์„œ๋“œ์—์„œ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•˜๊ณ  ์‹ถ์€ JSX๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ์˜ ๋ฐ˜ํ™˜๋ฌธ๊ณผ ๋™์ผํ•˜๋‹ค. props๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์ง€ ์•Š๊ณ  this.props๋กœ ํ˜ธ์ถœํ•œ๋‹ค. ์ด๋Š” React์˜ Component๋ฅผ ์ƒ์†๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
12
// ๊ฐ™์€ ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

//๐Ÿ‘‡ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ
class User extends React.Component {
  render() {
    return <div>User Name : {this.props.name}</div>;
  }
}
// ๐Ÿ‘‡ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ
const User = (props) => {
  return <div>User Name : {props.name}</div>;
};

state์™€ ์ด๋ฒคํŠธ

  • ๐Ÿ”– state๋ฅผ ์ •์˜ํ•  ๋•Œ๋Š” ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž(constructor(){})์—์„œ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    • ํด๋ž˜์Šค๊ฐ€ constructor๋ฅผ ์ •์˜ํ•˜๊ณ  ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์œผ๋ฉด super()๋ฅผ ํ†ตํ•ด ์ƒ์˜ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.
  • ๐Ÿ”– ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” this.setState() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋ฉฐ ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ์ƒํƒœ์™€ ์ƒˆ๋กœ ์ „๋‹ฌ๋œ ๊ฐ์ฒด(๋˜๋Š” ๊ฐฑ์‹  ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ์ฒด)๋ฅผ ๋ณ‘ํ•ฉํ•œ๋‹ค.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    class User extends React.Component {
      constructor() {
        //this๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ super๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
        super();
        //ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋Š” ๊ฐ์ฒด ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค.
        this.state = { showName: true, name: "yeeunkim" };
      }
    
      changeUserName() {
        this.setState((prev) => ({ showName: !prev.showName }));
      }
    
      render() {
        return (
          <>
            {this.state.showName && <div>User.name : {this.state.name} </div>}
            <button onClick={this.changeUserName.bind(this)}>
              toggle show username
            </button>
          </>
        );
      }
    }
    

๐Ÿค” constructor์—์„œ super๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š”?

๐Ÿค” super์— props๋ฅผ ๋ฐ˜๋“œ์‹œ ๋„˜๊ฒจ์ค˜์•ผ ํ•˜๋Š”๊ฐ€?

This post is licensed under CC BY 4.0 by the author.

๐ŸŠ 2022-08-08

๐ŸŠ 2022-08-11