React: ES6 ๊ตฌ๋ฌธ์—์„œ bind์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ฑฐ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2016๋…„ 02์›” 09์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/react

postMessage API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ iframe๊ณผ ํ†ต์‹ ํ•˜๋ ค๊ณ ํ•˜๋Š”๋ฐ ES6์˜ eventListeners ๊ด€๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ์— ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

React๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑ ์š”์†Œ ์ธ์Šคํ„ด์Šค์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค (ES6 ํด๋ž˜์Šค ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ œ์™ธ).

๋ฌธ์ œ๋Š” this.handler.bind(this) !== this.handler ์ด๋ฏ€๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋๋‚˜๋ฉด ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ์บก์Šํ™”ํ•˜๋ ค๊ณ  ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์บก์Šํ™” ํ•จ์ˆ˜์—๋„ ๋ฐ”์ธ๋”ฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž๋„ ์Šˆํผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ธ์ง€ ํ™•์‹  ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํ•„์š”ํ•œ ์ธ์ˆ˜๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์„ ๋†“์น˜๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ๋„์›€์ด๋ผ๋„ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

export default class SomeComponent extends Component {

  handleIframeData(event) {
    // some stuff in there that will need 'this' to be set to the component's context, to get props for example.
  }

  componentDidMount() {
    window.addEventListener('message', this.handleIframeData.bind(this), false)
  }

  componentWillUnmount() {
    // won't work because 'this.handleIframeData.bind(this) !== this.handleIframeData'
    window.removeEventListener('message', this.handleIframeData, false)
  }

  render() {
    return (
      <div className="SomeComponent" style={{height: '100%', width:'100%', display: 'table'}}>
        <iframe src="assets/iframe/index.html" style={{display: 'table-row', width: '100%', height:'100%', border: 0}}></iframe>
      </div>
    )
  }
}

์–ด์จŒ๋“  ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

Question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด์Šˆ ํŠธ๋ž˜์ปค๋Š” ์ผ๋ฐ˜์ ์ธ ์ง€์›์ด ์•„๋‹Œ React์˜ ๋ฒ„๊ทธ๋ฅผ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Stack Overflow ๋˜๋Š” IRC๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ฆ‰,์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ ๋ฐ”์ธ๋”ฉ ๋œ ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒ์„ฑ์ž์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ”์ธ๋”ฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

constructor(props) {
  super(props);
  this.handleIframeData = this.handleIframeData.bind(this);
}

ํด๋ž˜์Šค๋ฅผ ์†Œ๊ฐœ ํ•œ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค .

๋ชจ๋“  3 ๋Œ“๊ธ€

์ด์Šˆ ํŠธ๋ž˜์ปค๋Š” ์ผ๋ฐ˜์ ์ธ ์ง€์›์ด ์•„๋‹Œ React์˜ ๋ฒ„๊ทธ๋ฅผ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Stack Overflow ๋˜๋Š” IRC๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ฆ‰,์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ ๋ฐ”์ธ๋”ฉ ๋œ ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒ์„ฑ์ž์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ”์ธ๋”ฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

constructor(props) {
  super(props);
  this.handleIframeData = this.handleIframeData.bind(this);
}

ํด๋ž˜์Šค๋ฅผ ์†Œ๊ฐœ ํ•œ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค .

@fkling ์ •ํ™•ํžˆ ๋‚ด๊ฐ€ ๋งํ•˜๋ ค๊ณ ํ–ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค : P. ๋ชจ๋“  ์ ์„ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌ!

๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰