我有这个功能:
deleteTag() { // this.data.tags.pop(); console.log("I will delete a tag"); }
我在构造函数中绑定它:
this.deleteTag = this.deleteTag.bind(this);
但当我尝试这样做的时候:
render() { const renderTags = this.state.data.tags.map(function(tag,i){ return <span key={i} onClick={() => this.deleteTag()}>{tag} </span> }); return ( <div> {renderTags} </div> ); }
我得到:
未捕获的类型错误:无法读取未定义的属性“DeleteTag” 点击(bundle.js:46275) 位于object.reactErrorUtils.invokeguardCallback(bundle.js:4594) 在ExecuteDispatch上(bundle.js:4394) 在object.executeDispatchesNorder(bundle.js:4417)上 在ExecuteDispatchesAndRelease上(bundle.js:3847) 在ExecuteDispatchesAndReleaseTopLevel(bundle.js:3858)上 在array.foreach()处 在前臂聚集(bundle.js:4694) 位于object.processEventQueue(bundle.js:4063) 在runeventqueueinbatch(bundle.js:4723)上
我肯定这是愚蠢的事情,但我想不出来!
这是因为给定的函数 map 没有绑定。您可以使用箭头函数,并且 this 会是你所期望的。
map
this
const renderTags = this.state.data.tags.map((tag,i) => { return <span key={i} onClick={() => this.deleteTag()}>{tag} </span> });