按钮上的 React Fontawesome 图标不允许访问 ID

React Fontawesome Icon on Button not Allowing Id to be Accessed

我在我的项目中使用 React fontawesome。在我的组件的渲染功能下,我有以下将学校映射到页面上的功能,然后我想要一个带有编辑图标的按钮来执行操作。我的按钮代码如下所示:

      { this.state.myschools.map( (school) => (
          <Row key={school.id}>
            <Col><p>{school.name}</p></Col>
            { school.deaths.length > 0 ? <Col md="2"><button id={school.id} className="likelink" onClick={this.goToSchoolDeathList}>View Deaths</button></Col> : <Col md="2"></Col> }
            <Col><button id={school.id} onClick={this.editSchool}><FontAwesomeIcon icon={faEdit} /></button></Col>
          </Row>
        ))}

editSchool 函数如下:

  editSchool(e) {
      console.log("School Id");
      console.log(e.target.id);
  }

如果我点击 font awesome 图标周围的空白 space,则 ID 会记录到控制台。如果我只单击图标退出的区域,则不会记录 id。我希望用户能够单击按钮的任何部分(包括 fa 图标)并捕获学校 ID。

我已经尝试将 onClick 事件和 id 属性添加到 "FontAwesomeIcon" 组件,但仍然不起作用。

有人可以帮忙吗?

好吧,这是您在使用 React 期间学到的常见陷阱之一。放心,我们都掉过这个坑了

这里几乎没有顿悟时刻。

1st Aha: React 没有通常的方法让您在事件中获取元素属性(在您的示例中为 e)。

也就是说,您仍然可以通过 e.target 访问 button 元素并使用 JavaScript 获取属性。

解决方案 #1 JavaScript getAttribute

editSchool(e) {
  console.log("School Id");
  console.log(e.target.getAttribute('id'));
}

e.target就是你点击的HTML元素,我们可以用JavaScript的方式获取属性。 (请注意,Javascript方式不是React方式)

但还有另一种方式,您会更频繁地看到这种方式。

解决方案 #2 您可以直接在渲染中定义一个函数

<button id={school.id} onClick={e => this.editSchool(school.id)}>

请注意这个又一个陷阱,

2nd Aha: 将 onClick 绑定到函数,而不是函数的结果。

不要这样做

<button id={school.id} onClick={this.editSchool(scholl.id)}> // This is incorrect

问题是 onClick prop 期望有人点击时调用一个函数。

第一个我们定义了一个函数e => this.editSchool(school.id)并且将onClick绑定到新定义的函数上。

而第二种,我们只是将 onClick 绑定到函数 this.editSchool(school.id) 的 "result",这不是函数。