Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在映射的元素中执行onClick函数_Javascript_Reactjs_Onclick_Event Listener - Fatal编程技术网

Javascript 无法在映射的元素中执行onClick函数

Javascript 无法在映射的元素中执行onClick函数,javascript,reactjs,onclick,event-listener,Javascript,Reactjs,Onclick,Event Listener,我正在尝试将单击功能添加到从数组映射的列表标记中,即: {this.props.addresses.map((address, index) => <li key={`address-${index}`} onClick={this.addressClick}>{address.prediction}</li> )} 作为类中的一个函数 addressClick () { console.log('Clicked') } 当我点击列表标签时

我正在尝试将单击功能添加到从数组映射的列表标记中,即:

{this.props.addresses.map((address, index) =>
   <li key={`address-${index}`} onClick={this.addressClick}>{address.prediction}</li>
)}
作为类中的一个函数

  addressClick () {
    console.log('Clicked')
  }
当我点击列表标签时,什么也没发生,我看不到任何控制台语句。

您可以通过将索引传递给另一个函数,然后调用
addressClick()
来实现这一点

结果:
{this.props.addresses.map((地址,索引)=>

将其绑定到映射方法:

{this.props.addresses.map((address, index) =>
   <li key={`address-${index}`} onClick={this.addressClick}>{address.prediction}</li>
).bind(this)}
{this.props.addresses.map((地址,索引)=>
  • {address.prediction}
  • ).bind(这个)}
    除非我遗漏了什么,否则您的代码应该可以工作。例如:

    const arr = [1,2,3,4]
    
    class App extends Component {
      constructor(props) {
        super(props)
        this.addressClick = this.addressClick.bind(this)
      }
    
      addressClick () {
        console.log('Clicked')
      }
    
      render() {
        return (
          <ul>
            {arr.map((address, index) =>
              <li key={`address-${index}`} onClick={this.addressClick}>{address}</li>
            ) }
          </ul>
        )
      }
    }
    
    const arr=[1,2,3,4]
    类应用程序扩展组件{
    建造师(道具){
    超级(道具)
    this.addressClick=this.addressClick.bind(this)
    }
    地址点击(){
    console.log('Clicked')
    }
    render(){
    返回(
    
      {arr.map((地址,索引)=>
    • {address}
    • ) }
    ) } }
    mapping code-render方法在哪里?可能,这里没有定义this.addressClick?您还可以将
    this
    作为第二个参数传递到
    map()
    并避免绑定。顺便说一句,它应该是
    this.props.addresses.map.bind(this)(()=>{…})
    ,不是吗?忘了我评论的第二部分吧。它叫this.map是错误的,因为它不是我们想要的。我认为外部绑定的唯一方法是通过
    map()
    的第二个参数。
    {this.props.addresses.map((address, index) =>
        <li key={`address-${index}`} onClick={`clickListener(${index})`}</li>
    )}
    
    {this.props.addresses.map((address, index) =>
       <li key={`address-${index}`} onClick={this.addressClick}>{address.prediction}</li>
    ).bind(this)}
    
    const arr = [1,2,3,4]
    
    class App extends Component {
      constructor(props) {
        super(props)
        this.addressClick = this.addressClick.bind(this)
      }
    
      addressClick () {
        console.log('Clicked')
      }
    
      render() {
        return (
          <ul>
            {arr.map((address, index) =>
              <li key={`address-${index}`} onClick={this.addressClick}>{address}</li>
            ) }
          </ul>
        )
      }
    }