代码之家  ›  专栏  ›  技术社区  ›  R. Kohlisch

尽管函数是绑定的,但它在onclick处未定义?

  •  1
  • R. Kohlisch  · 技术社区  · 6 年前

    我有这个功能:

      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)上

    我肯定这是愚蠢的事情,但我想不出来!

    1 回复  |  直到 6 年前
        1
  •  3
  •   Tholle    6 年前

    这是因为给定的函数 map 没有绑定。您可以使用箭头函数,并且 this 会是你所期望的。

    const renderTags = this.state.data.tags.map((tag,i) => {
      return <span key={i} onClick={() => this.deleteTag()}>{tag} </span>
    });