我认为,在我的过滤器组件中有关于this.onItemClick的范围。
获取错误“onItemClick未定义”。
这是Filter组件的代码。
var Filter = React.createClass({
getDefaultProps() {
return {
filterList: [],
name: ''
};
},
onItemClick(event) {
event.currentTarget.style.backgroundColor = '#f00';
},
render() {
return (
<div className="filterCloud quarter-section">
<h3>{this.props.name}</h3>
<ul>
{this.props.filterList.map(function(listValue) {
return <li onClick={this.onItemClick}>{listValue}</li>;
})}
</ul>
</div>
)
}});
答案 0 :(得分:1)
您应该为.map
回调设置this
,因为现在this
指的是全局范围(在浏览器中为window
,如果您使用,则为undefined
strict mode
)
this.props.filterList.map(function(listValue) {
return <li onClick={this.onItemClick}>{listValue}</li>;
}, this);
^^^^^
答案 1 :(得分:0)
你可以在这里使用bind
var Filter = React.createClass({
getDefaultProps() {
return {
filterList: [],
name: ''
};
},
onItemClick(event) {
event.currentTarget.style.backgroundColor = '#f00';
},
render() {
return (
<div className="filterCloud quarter-section">
<h3>{this.props.name}</h3>
<ul>
{this.props.filterList.map(function(listValue) {
return <li onClick={this.onItemClick}>{listValue}</li>;
}.bind(this))}
</ul>
</div>
)
}});
答案 2 :(得分:0)
你应该将this
绑定到你的匿名函数。
试试这个:
{this.props.filterList.map(function(listValue) {
return <li onClick={this.onItemClick}>{listValue}</li>;
}.bind(this))}
或使用箭头功能(自动完成工作):
{this.props.filterList.map( (listValue) => {
return <li onClick={this.onItemClick}>{listValue}</li>;
}
)}
答案 3 :(得分:0)
如果您使用arrow functions
,则可以使用var Filter = React.createClass({
getDefaultProps() {
return {
filterList: [],
name: ''
};
},
onItemClick(event) {
event.currentTarget.style.backgroundColor = '#f00';
},
render() {
return (
<div className="filterCloud quarter-section">
<h3>{this.props.name}</h3>
<ul>
{this.props.filterList.map((listValue) =>
<li onClick={this.onItemClick}>{listValue}</li>
)}
</ul>
</div>
);
}
});
:
VACUUM FREEZE