أحاول التواصل مع iframe باستخدام postMessage API ولكن لدي مشكلة في إدارة مستمعي الأحداث في ES6
جاء في المستندات أن
باستخدام 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 .