当前位置: 首页 > 知识库问答 >
问题:

单击react[重复]前激发的onClick事件

屠锦
2023-03-14

我想删除李每当用户点击删除按钮。所以我传递了索引,但它在我点击它之前被触发了,我想我传递值是错误的。

http://jsfiddle.net/axhpuepq

var App = React.createClass({
   getInitialState(){
     return {
       items:[1,2,3],
       isEdit: false
     }
   },
   renderEditForm(){
   return(
   <div>
   <input type="text" />
   <button onClick={this.saveHandler}>save</button>
   </div>
   )
   },
   ItemCtrl(index){
   return(
   <div className="itemCtrlWrap">
   <button onClick={this.editHandler}>Edit</button>
   <button onClick={this.dltHandler(index)}>Delete</button>
   </div>
   )
   },
   editHandler(){
   this.setState({isEdit:true})
   },
   saveHandler(){
    this.setState({isEdit:false})
   },
   dltHandler(index){
     console.log(index) //shall recieve index here upon click
   },
   renderItem(){
     return(
       this.state.items.map((item,i)=>
         <li key={i}> {this.state.isEdit ? this.renderEditForm() : item} {this.ItemCtrl(i)}</li>)
     )
   },
   render(){
      return(
        <ul>
          {this.renderItem()}
        </ul>
      )
   }
})

React.render(<App />, document.getElementById('container'));

共有2个答案

潘阳舒
2023-03-14

当您像这样定义on点击时,它在实例化时调用该函数。您需要使用bind或定义一个匿名函数:

   <button onClick={this.dltHandler.bind(this, index)}>Delete</button>

   <button onClick={() => this.dltHandler(index)}>Delete</button>

这两个函数都将函数传递给onClick处理程序,但它们在触发onClick之前不会执行。请注意,这样做将导致在每次渲染调用时生成一个新函数。如果经常进行渲染,这在计算上可能会很昂贵。

如果性能成为一个问题,最好将按钮重构为一个单独的组件,该组件具有定义的dltHandler功能。

单于庆
2023-03-14

您正在执行函数,而不仅仅是设置它,如下所示:

onClick={this.dltHandler(index)}

如果要传递一些参数,请绑定它们。比如:

onClick={this.dltHandler.bind(this, index)}

或使用箭头功能:

onClick={() => this.dltHandler(index)}

如果您注意到,我们正在设置一个函数,同时将其声明为onClark。这个函数只是执行dlHandler

 类似资料:
  • 我将2个值传递给子组件: 要显示的对象列表 删除函数。 我使用.map()函数来显示我的对象列表(就像react教程页面中给出的示例),但是该组件中的按钮在呈现时激发函数(它不应该在呈现时激发)。我的代码如下所示: 我的问题是:为什么函数在render时触发,以及如何使它不触发?

  • 本文向大家介绍三种Android单击事件onclick的实现方法,包括了三种Android单击事件onclick的实现方法的使用技巧和注意事项,需要的朋友参考一下 onclick事件的定义方法,分为三种,分别为在xml中进行指定方法;在Actitivy中new出一个OnClickListenner();实现OnClickListener接口三种方式。 代码分别如下: 1. xml指定onclick

  • 问题内容: 我正在尝试在React JS中创建一个模式 我有一个外部div,它是整个身体,而我有一个内部div。如果要在内部div之外单击它,我想应用该函数以关闭模式。 我的代码如下: 当我单击带有图标的链接时,或者在内部div外部单击时,它都可以正常工作。 但是问题是,如果我在内部div中单击,它也会关闭。 我不想使用jQuery。 有什么建议吗? 更新 而在我的情况是一个接触的形式: 问题答案

  • react中一次点击事件触发useReducer的dispatch会添加两个重复的内容。 以下是回调函数: const handleCheck = (e, path, ifPublic, tbIndex, chooseTable) => { }; 以下是onclick事件: Checkbox的功能正常,div会有问题

  • 我是个新手。如何只在React中单击按钮后才呈现组件? 我还想知道如何在点击按钮时刷新组件而不刷新整个页面。

  • 问题内容: 我目前正在使用jQuery使div可点击,在这个div中我也有锚点。我遇到的问题是,当我单击某个锚点时,两个单击事件都已触发(对于div和锚点)。如何在单击锚点时防止div的onclick事件触发? 这是损坏的代码: JavaScript 的HTML 问题答案: 事件冒泡到DOM中已附加单击事件的最高点。因此,在您的示例中,即使div中没有​​其他可显式单击的元素,div的每个子元素也