代码之家  ›  专栏  ›  技术社区  ›  lost9123193

React OnClick函数未绑定

  •  0
  • lost9123193  · 技术社区  · 9 年前

    我有一个 onClick 绑定到的处理程序 currentAreas 组成部分这个 onClick(单击) 当前区域 组件被调用,但之后不工作。

    onClick(单击) 当我尝试单击锚标记时不起作用,我认为这可能是由于我绑定 onClick(单击) 作用

    当前区域.js

    import React, { Component, PropTypes } from 'react';
    
    export default class currentAreas extends Component {
      constructor(props) {
        super(props);
      }
    
      render() {
        const { onClick } = this.props;
    
        return(
            <div className="list-group panel">
              <a href="#demo3" className="list-group-item" onClick={onClick("All", "All")} >All</a>
    
            </div>
        );
      }
    }
    

    当前列表。js(主要组件)

    class currentList extends Component {
        constructor(props) {
          super(props);
    
          this.updateLocation = this.updateLocation.bind(this);
        }
    
      updateLocation(name, nameLocation){
        console.log(name);
        console.log(nameLocation);
      }
    
        render() {
            return (
               <div className="step-3-container">
    
                <CurrentAreas 
                  onClick ={this.updateLocation} />
            </div>
          )
        }
      }
    
    2 回复  |  直到 9 年前
        1
  •  3
  •   William Martins    9 年前

    每当您的javascript解释器“看到”一个“()”时,它就会尝试执行“())”之前的函数。因此,您的代码实际做的是 onClick (来自 props ),作为参数“全部”和“全部”传递。所以,你需要做的是,不要自己称呼它,让 onClick(单击) 处理程序调用它。

    onClick(单击) 道具必须接收 function .

    onClick(单击) 变成箭头函数,这样做:

    <a href="#demo3" onClick={() => onClick("All", "All")}>All</a>
    

    或者,你可以 bind 函数的参数(bind返回一个函数,因此它很适合 onClick(单击) ).

    <a href="#demo3" onClick={onClick.bind(null, "All", "All")}>All</a>
    

    绑定 参数是 this 绑定函数内的值。

    FMI关于 绑定 : https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind

        2
  •  2
  •   PhilVarg    9 年前

    您在组件声明期间执行函数,这可能意味着您在呈现时触发它,而不是单击

    onClick={onClick("All", "All")}
    

    需要

    onClick={onClick.bind(null, "All", "All")}
    

    onClick={function(){ onClick("All", "All"); }}
    

    这个 onClick 反应组件需要一个可以执行的回调。您正在传入的返回值 this.props.onClick 因为你马上就用论据打电话