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

事件处理程序上的React Cant Access类范围[重复]

陈弘厚
2023-03-14

我试图创建一个反应组件,这是一个文本输入。当有人按下回车键时,必须调用mymethod()。但是在handleKeyPress,我不能访问类范围。我怎样才能解决这个问题?

class MyContainer extends Component {
    constructor(props, context) {
        super(props, context);        
    }

   myMethod(){}


    handleKeyPress(target) {
        var self = this;
        if(target.charCode === 13) {
            this.myMethod();
        }
    }

    render() {
        <input onKeyPress={this.handleKeyPress}  ref={(input) => this.inputMax = input} type="text" />
    }
}

共有2个答案

晏富
2023-03-14

您需要在构造函数中绑定函数。

constructor(props, context) {
    super(props, context);
    this.handleKeyPress = this.handleKeyPress.bind(this)
}
柯锋
2023-03-14

您需要绑定处理程序。

class MyContainer extends Component {
    constructor(props, context) {
        super(props, context);
        this.handleKeyPress = this.handleKeyPress.bind(this);
    }

   myMethod(){}


    handleKeyPress(target) {
        var self = this;
        if(target.charCode === 13) {
            this.myMethod();
        }
    }

    render() {
        <input onKeyPress={this.handleKeyPress}  ref={(input) => this.inputMax = input} type="text" />
    }
}

另一种解决方案是使用箭头函数(有性能缺陷)或@autobind装饰器

 类似资料:
  • 玩一些es6,遇到了一个问题,我不知道如何解决 在的内部,?目前我用bind解决了这个问题,但我想知道是否有一种更“合适”的ES6方法来实现这一点。

  • 事件就是用户或浏览器自身执行的某种动作。诸如click、load 和mouseover,都是事件的名字。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,因此click 事件的事件处理程序就是onclick,load 事件的事件处理程序就是onload。为事件指定处理程序的方式有好几种。 13.2.1 HTML事件处理程序某个元素支持的每种事件,都可以使用一

  • 我将一些事件转发给Kafka并启动了我的Kafka流程序。我的程序开始处理事件并完成。一段时间后,我停止了我的Kafka流应用程序并重新开始。观察到我的Kafka流程序正在处理已经处理过的先前事件。 根据我的理解,Kafka流在内部维护每个应用程序id的输入主题本身的偏移量。但在这里重新处理已经处理的事件。 如何验证Kafka流处理的偏移量?Kafka流是如何保存这些书签的?根据什么 如果Kafk

  • 我已经在JList上有一个这样的自定义控件库 但是我希望Jlist有滚动条,所以我将自定义控件的超类更改为JScrollPane并将JList添加到其中。像这样的代码 好吧,如果MyClass扩展了JList,在JFrame中我可以将MouseListener添加到MyClass对象中,在mouseClick中我比较MouseEvent getSource是MyClass的一个实例并调用MyCla

  • 我不确定如何处理以下情况。有一个接口定义了事件处理方法“onSomethinAccounting()”。 有一个基类将其实现为虚拟方法,并在其中使用一些异步代码。 有一个派生类要重写虚方法,但也要调用。 问题是,我不能将方法调用标记为等待,因为它返回void。事件处理程序可以使用异步void方法,因此不能将其更改为任务(这也不是我的代码)。 那么,我应该如何确保我的派生类执行? 这个解决方案在派生

  • 事件 事件,就是文档与浏览器发生特定的 交互瞬间。JavaScript与HTML之间的交互就是通过事件实现的。 事件流 所谓事件流,就是接收页面事件的顺序。 事件流分 事件冒泡流 与 事件捕获流。事件冒泡流是IE开发团队提出的,捕获流是Netscape开发团队提出的。 事件冒泡流 所谓事件冒泡,就是事件开始时由 最具体的元素(文档中嵌套最深的那个 节点)接收,然后逐级向上传播到较为不具体的节点(文