所以我的问题是我收到了这个错误:
未捕获的TypeError:无法读取属性' removeCard'未定义的
从这段代码:
var SurveyDiv = React.createClass({
getInitialState: function() {
return{
showCard: true
};
},
render: function() {
console.log(this.props.routes);
var routesObject = this.props.routes;
var itemSurvey = this.state.showCard ? this.props.questions.map(function (itemSurvey) {
return(
<Card
id ={itemSurvey.surveyID}
title={itemSurvey.title}
options={itemSurvey.options}
type={itemSurvey.type}
routes={routesObject}
removeHandler={this.removeCard}>
</Card>
);
}) : '';
return(
<div className="surveyDiv">
{itemSurvey}
</div>
);
},
removeCard: function() {
console.log("inside removeCard");
this.setState({showCard: false});
}
});
所以我的理论是,当我说这个时,它内部的删除卡引用了var itemSurvey而不是SurveyDiv,它实际上包含了removeCard函数。我怎么能绕过这个?
答案 0 :(得分:1)
当您在函数内使用this.removeCard
时,您引用的this
函数不是SurveyDiv
。
你可以通过以下两种方式解决这个问题:
var removeCard = this.removeCard;
var itemSurvey = this.state.showCard ? this.props.questions.map(function (itemSurvey) {
return(
<Card
id ={itemSurvey.surveyID}
title={itemSurvey.title}
options={itemSurvey.options}
type={itemSurvey.type}
routes={routesObject}
removeHandler={removeCard}>
</Card>
);
}) : '';
或者使用bind
来更改地图功能中的this
:
var itemSurvey = this.state.showCard ? this.props.questions.map(function (itemSurvey) {
return(
<Card
id ={itemSurvey.surveyID}
title={itemSurvey.title}
options={itemSurvey.options}
type={itemSurvey.type}
routes={routesObject}
removeHandler={this.removeCard}>
</Card>
);
}).bind(this) : '';
答案 1 :(得分:0)
您应该可以在地图外宣布它并将其传入。
// in render()
var removeCard = this.removeCard.bind(this);
// inside <Card
removeHandler: {removeCard}