【发布时间】:2020-01-30 04:46:37
【问题描述】:
我是 React.js 的新手,也许这个问题有点含糊,请善待。我正在使用react-image-gallery 在我的组件中创建一个画廊。这个画廊组件有一个回调函数 onImageLoad 的道具,它在加载图像时调用(我正在使用延迟加载)。问题是这个 onImageLoad 道具能够直接执行 console.log('called') 但它不会触发任何事件。所以这行得通:
class Post extends React.Component {
render() {
return (
<ImageGallery onImageLoad={console.log('called')} />
)
}
}
但这些不起作用:
class Post extends React.Component {
EVENTNAME = e => {
console.log('called', e);
}
render() {
return (
<ImageGallery onImageLoad={this.EVENTNAME.bind(this)} />
)
}
}
这也不起作用:
class Post extends React.Component {
EVENTNAME = e => {
console.log('called', e);
}
render() {
return (
<ImageGallery onImageLoad={e => this.EVENTNAME} />
)
}
}
也不是这个:
class Post extends React.Component {
EVENTNAME = e => {
console.log('called', e);
}
render() {
return (
<ImageGallery onImageLoad={e => console.log('called', e)} />
)
}
}
也试过这个:
class Post extends React.Component {
EVENTNAME = e => {
console.log('called', e);
}
render() {
return (
<ImageGallery onImageLoad={this.EVENTNAME} />
)
}
}
我猜这是函数范围的问题和类似的问题。一些提示和指导将不胜感激。谢谢!
查看完整文件代码Here
【问题讨论】:
-
我建议您将
EVENTNAME声明移到render方法之外,并将其称为this. EVENTNAME而不是this.EVENTNAME.bind(this)。箭头函数使用词法this,所以我们不必绑定它们 -
@Fiju 已经尝试过了,但不起作用。我已经更新了这个问题。感谢您的回复。
标签: javascript reactjs function scope