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

在onClick处理程序中传递参数的最有效方法

洪越泽
2023-03-14

我正在使用内联箭头函数来更改我的React组件中一些div的onclick处理程序,但我知道从性能上来说这不是一个好方法

客观地说,设置需要参数的onclick处理程序的最有效方法是什么?这是我尝试过的:

1.内联箭头函数

changeRoute (routeName) {
  console.log(routeName)
}
render() {
  return (
    <>
      <div onClick={() => this.changeRoute("page1")}>1</div>
      <div onClick={() => this.changeRoute("page2")}>2</div>
    </>
  )
}

2.如果我使用构造器绑定那么我怎么传递道具?

constructor() {
  super(props)
  this.changeRoute = this.changeRoute.bind(this)
}
changeRoute (routeName) {
  console.log(routeName)
}
render() {
  return (
    <>
      <div onClick={this.changeRoute}>1</div>
      <div onClick={this.changeRoute}>2</div>
    </>
  )
}

3.如果我移除箭头函数,那么在呈现器本身上调用的函数

changeRoute (routeName) {
  console.log(routeName)
}
render() {
  return (
    <>
      <div onClick={this.changeRoute("page1")}>1</div>
      <div onClick={this.changeRoute("page2")}>2</div>
    </>
  )
}

4.如果我使用内联绑定,那么它的性能也不是最好的

changeRoute (routeName) {
  console.log(routeName)
}
render() {
  return (
    <>
      <div onClick={this.changeRoute.bind(this, "page1")}>1</div>
      <div onClick={this.changeRoute.bind(this, "page2")}>2</div>
    </>
  )
}

共有1个答案

翟高明
2023-03-14

可以使用箭头函数定义changeroute处理程序

这称为类字段语法。更多关于它在这里的官方反应文件。

constructor() {
  super(props)
}

changeRoute = (parameter) => (event) => {
    // business logic for route change.
}

那么您可以像这样直接使用这个功能:

render() {
  return (
    <>
      <div onClick={changeRoute(params1)}>1</div>
      <div onClick={changeRoute(params2)}>2</div>
    </>
  )
}
 类似资料:
  • 当事件处理程序使用时(下面的使用),您必须将事件处理程序与kerword绑定。否则,需要使用箭头函数。 例如。 但是,使用上面的方法,您不能传递参数。你需要用任何一种... 匿名箭头函数 根据官方文档,使用会破坏性能,因为... 在render中使用function.Prototype.Bind会在组件每次呈现时创建一个新函数 使用匿名箭头函数也是如此。医生说... 在render中使用箭头函数会

  • 问题内容: 当必须在事件处理程序中使用关键字时,必须将函数(事件处理程序)与kerword绑定。否则,您需要使用箭头功能。 例如 但是,使用上述方法,您无法传递参数。您需要使用… 在功能之后 匿名箭头功能 即 这是问题。 将参数传递给事件处理程序的最有效方法是什么? 根据官方文档,使用会损害性能,因为… 每次渲染组件时,在render中使用Function.prototype.bind都会创建一个

  • 问题内容: 我试图将我的数据库对象传递给我的处理程序,而不是具有全局对象。但是我不知道这是否可行,我使用的是Gorilla Mux软件包,我可以看到它把闭包作为第二个参数。 然后定义了我可以使用的参数,理想情况下,我希望拥有这样的第三个参数。 有解决方法吗?还是我需要一个全局数据库对象?我是Go的新手,所以请详细说明可能的答案。 问题答案: 欢迎来到。 可以使用全局变量,特别是数据库对象。 但是,

  • 本文向大家介绍jsp中URL传递中文参数的处理方法,包括了jsp中URL传递中文参数的处理方法的使用技巧和注意事项,需要的朋友参考一下 在页面的url中使用encodeURI(encodeURI(中文)),对中文进行编码,并在服务器的java程序中使用URLDecoder.decode(中文, "UTF-8")进行解码即可; 如果url中需要传递+、#、?等特殊符号,可以使用encodeURICo

  • 问题内容: 我想将参数(即字符串)传递给Onclick函数。目前,我这样做: 例如,result.name等于字符串“ Add”。当我单击此按钮时,出现一个错误,提示未定义添加。由于此函数调用可以完美地与数字参数一起使用,因此我认为它与字符串中的符号“”有关。以前有人遇到过这个问题吗? 问题答案: 看起来您是从字符串构建DOM元素。您只需要在result.name周围添加一些引号即可: 您实际上应

  • 问题内容: 所以我试图使反应与ES6语法一起工作。在ES5中,我有setInitialState,而没有使用函数绑定语法的构造函数。我有一个价格列表,该价格是任意的,并且我希望状态在输入元素发生更改时发生变化。但是正确的价格必须改变。 我什至不确定这是否是正确的方法。有人可以告诉我最近应做的事情吗? 这是我的代码: 这是错误… 问题答案: 您绑定的功能不正确 在构造函数中,您无需指定参数,只需要像