Skip to content

Latest commit

ย 

History

History
70 lines (50 loc) ยท 2.77 KB

File metadata and controls

70 lines (50 loc) ยท 2.77 KB

Multiple Components

์ง€๊ธˆ๊นŒ์ง€ ๋‹จ์ผ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํƒ€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์œ ์ € ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ๋‹ค์Œ์—๋Š” React์˜ ๊ฐ€์žฅ ์ข‹์€ ํŠน์ง•์ค‘์˜ ํ•˜๋‚˜๋ฅผ ์‚ดํŽด๋ณด์ž. ์ฆ‰ ๊ตฌ์„ฑ๊ฐ€๋Šฅ์„ฑ.

๋™๊ธฐ: ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(Separation of Concerns)

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

๊ตฌ์„ฑ์˜ ์˜ˆ

ํ”„๋กœํŒŒ์ผ ์‚ฌ์ง„๊ณผ ์œ ์ € ์ด๋ฆ„์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ์•„๋ฐ”ํƒ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž.

var Avatar = React.createClass({
  render: function() {
    return (
      <div>
        <ProfilePic username={this.props.username} />
        <ProfileLink username={this.props.username} />
      </div>
    );
  }
});

var ProfilePic = React.createClass({
  render: function() {
    return (
      <img src={'http://graph.facebook.com/' + this.props.username + '/picture'} />
    );
  }
});

var ProfileLink = React.createClass({
  render: function() {
    return (
      <a href={'http://www.facebook.com/' + this.props.username}>
        {this.props.username}
      </a>
    );
  }
});

React.render(
  <Avatar username="pwh" />,
  document.getElementById('example')
);

์†Œ์œ ๊ถŒ

Avatar ์ธ์Šคํ„ด์Šค๋Š” ProfilePic๊ณผ ProfileLink ์ธ์Šคํ„ด์Šค๋ฅผ ์†Œ์œ ํ•œ๋‹ค. React์—์„œ๋Š” ๋‹ค์Œ ์ปดํฌ๋„ŒํŠธ์˜ props๋ฅผ ์„ค์ •ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์†Œ์œ ์ž์ด๋‹ค. ํ˜•์‹์ ์œผ๋กœ๋Š” ์ปดํฌ๋„ŒํŠธ x๊ฐ€ ์ปดํฌ๋„ŒํŠธ y์˜ render()ํ•จ์ˆ˜์—์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค๋ฉด, y๋Š” x๋ฅผ ์†Œ์œ ํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค. ์•ž์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์˜ props๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. props๋Š” ํ•ญ์ƒ ์†Œ์œ ์ž๊ฐ€ ์„ค์ •ํ•œ ๊ฐ’์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ UI์˜ ์ผ๊ด€์„ฑ์ด ์œ ์ง€๋œ๋‹ค.

์†Œ์œ ์ž ๊ด€๊ณ„(owner-ownee)์™€ ๋ถ€๋ชจ-์ž์‹(parent-child)๊ด€๊ณ„๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์†Œ์œ ์ž ๊ด€๊ณ„๋ฅผ React์—์„œ ์ข€ ํŠน๋ณ„ํ•œ ๋ฐ˜๋ฉด ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋Š” ์ผ๋ฐ˜์ ์ธ DOM ๊ด€๊ณ„์ด๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ Avatar๋Š” ProfilePic๊ณผ ProfileLink๋ฅผ ์†Œ์œ ํ•˜์ง€๋งŒ, div๋Š” ProfilePic๊ณผ ProfileLink์˜ ๋ถ€๋ชจ์ด๋‹ค.

์ž์‹

React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ, ์ถ”๊ฐ€์ ์ธ React Component๋‚˜ Javascript ํ‘œํ˜„์„ ์‹œ์ž‘ ํƒœ๊ทธ์™€ ์ข…๋ฃŒ ํƒœ๊ทธ์‚ฌ์ด์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

<Parent><Child /></Parent>

์ž์‹์„ ์ฝ๊ธฐ ์œ„ํ•ด ๋ถ€๋ชจ๋Š” this.props.children์ด๋ผ๋Š” ํŠน๋ณ„ prop์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ณด๋‹ค๋Š” React.Children utilities ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.

์ž์‹ ์ผ์น˜(Child Reconciliation)

...๊ณ„์†