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>
)
}
}
์ด์จ๋ ๊ฐ์ฌํฉ๋๋ค!
์ด์ ํธ๋์ปค๋ ์ผ๋ฐ์ ์ธ ์ง์์ด ์๋ 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. ๋ชจ๋ ์ ์ ์์ ํ์ญ์์ค. ๊ฐ์ฌ!
๋ค์ ํ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด์ ํธ๋์ปค๋ ์ผ๋ฐ์ ์ธ ์ง์์ด ์๋ React์ ๋ฒ๊ทธ๋ฅผ์ํ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ์ํด Stack Overflow ๋๋ IRC๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์ฆ,์ด ๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ ์ ๋ฐ์ธ๋ฉ ๋ ํธ๋ค๋ฌ์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์์ฑ์์์ ๋ฉ์๋๋ฅผ ๋ฐ์ธ๋ฉ ํ ์ ์์ต๋๋ค.
ํด๋์ค๋ฅผ ์๊ฐ ํ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding์ ์ฐธ์กฐํ์ญ์์ค .