gpt4 book ai didi

ReactJS 无法访问 "this"方法

转载 作者:行者123 更新时间:2023-12-01 21:12:16 24 4
gpt4 key购买 nike

我正在尝试将方法传递给子组件以处理 onclick 事件。我在网上看到了很多例子,但我无法让它发挥作用。当我在父级的渲染函数中并尝试将“this.handleClick”传递给子级时,handleClick 是未定义的。

看看 ThumbList 的 render 方法:

var Thumb = React.createClass({
handleClick: function() {
console.log(this)
console.log('handleClick of Thumb')
this.props.onClick()
},
render: function() {
return(
<div className="thumb" key={this.props.thumb.url}>
<a href='#' onClick={this.handleClick}>
<img src={'/img/rings/thumbs/'+this.props.thumb.url+'_thumb.jpg'} alt="Image">
</img>
</a>
</div>
);
}
});

var ThumbList = React.createClass({

handleClick: function (id) {
console.log('click of ThumbList');

},


loadFromServer: function() {
$.ajax({
url: 'rings/imgs/5',
dataType: 'json',
success: function(data) {
this.setState({data: data});
}.bind(this),
error: function(xhr, status, err) {
console.error('rings/imgs/5', status, err.toString());
}.bind(this)
});
},
getInitialState: function(){
return {data: [] };
},
componentDidMount: function(){
this.loadFromServer();
setInterval(this.loadFromServer, 2000);
},

render: function() {
var handlefunc=this.handleClick
var thumbsNodes = this.state.data.map(function(thumb) {
console.log(this.handleClick) // is Undefined!
console.log(handlefunc) // is working
return (
<Thumb thumb={thumb} key={thumb.url} onClick={handlefunc.bind(this,thumb.url)}/>
);
});

return(
<div className="col-md-1 col-md-offset-1" id='thumbs'>
{thumbsNodes}
</div>

);
}

});

知道我可能遗漏了什么吗?

最佳答案

如果您在开发工作流程中使用像 Babel 这样的编译器,我建议您使用 arrow functions :

var thumbsNodes = this.state.data.map((thumb) => {
console.log(this.handleClick);
return <Thumb thumb={thumb} key={thumb.url}
onClick={this.handlefunc.bind(this,thumb.url)}/>;
});

如您所见,这是一个非常简洁的语法。箭头函数将为您保留 this 上下文。 Babel 编译器生成使用闭包的 JavaScript:

var thumbsNodes = this.state.data.map(function(thumb) {
var _this = this;
console.log(_this.handleClick);
return <Thumb thumb={thumb} key={thumb.url}
onClick={_this.handlefunc.bind(_this,thumb.url)}/>;
});

关于ReactJS 无法访问 "this"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29192687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com