当前位置: 首页 > 面试题库 >

在React中的回调内部访问event.target

杨豪
2023-03-14
问题内容

我有以下课程片段:

constructor(props) {
    super(props);

    this.timeout = null;
}

search = (e) => {
    clearTimeout(this.timeout);
    this.timeout = setTimeout(
        function(){ console.log(e.target); },
        500
    );
}

<input 
    type="text" 
    placeholder="Search by title or author" 
    onKeyPress={this.search} />

我无法获得设置的超时值以从事件中打印值,我应该做些什么,但我不是吗?


问题答案:

SyntheticEvent

根据 DOC

SyntheticEvent已合并。这意味着在调用事件回调之后,将重新使用SyntheticEvent对象,并且所有属性都将无效。这是出于性能原因。

例:

function onClick(event) {
   console.log(event.type); // => "click"
   const eventType = event.type; // => "click"

   setTimeout(function() {
      console.log(event.type); // => null
      console.log(eventType); // => "click"
   }, 0);    
}

如何访问回调中的值?

将值存储在变量中:

如果要在超时回调函数中访问该值,则将该值存储在变量中并使用该变量,而不是直接使用事件对象。

function onClick(event) {

   console.log(event.type); // => "click"

   const { type } = event;

   setTimeout(function() {
      console.log(type);   // => click
   }, 0);    
}

使用event.persist():

如果要以异步方式访问事件属性,则应在事件上调用 event.persist() ,这将从池中删除综合事件,并允许用户代码保留对该事件的引用。

function onClick(event) {

   event.persist();

   console.log(event.type); // => "click"

   setTimeout(function() {
      console.log(event.type); // => click
   }, 0);    
}


 类似资料:
  • 问题内容: 我认为这是异步的问题,但我不知道解决方案。 我的问题是,如果我尝试在函数外部访问它,则返回undefined,并且我不知道如何在页面上显示表格。 问题答案: 问题是Selling.find是异步的,可能在执行this.table = table时尚未完成。尝试类似以下的方法。 这将确保在获取结果并填充表之后才使用表。

  • 编辑(2020年6月22日):由于这个问题引起了一些新的兴趣,我意识到可能会有一些困惑。因此,我想强调:问题中的例子是作为玩具的例子。它没有反映问题。引发这个问题的问题是使用第三方库(对该库的控制有限),该库将回调作为函数的参数。提供最新状态的回调的正确方法是什么?在反应类中,这可以通过使用this来完成。在React钩子中,由于状态封装在函数中的方式,如果回调通过获取状态,它将是过时的(值设置回

  • 问题内容: 在JSX中,如何从带引号的属性值内部引用值? 例如: 产生的HTML输出为: 问题答案: React(或JSX)不支持在属性值内进行变量插值,但您可以将任何JS表达式放在花括号内作为整个属性值,因此可以这样做:

  • 问题内容: 我有以下用例。 我的React组件中加载了一些第三方来源的HTML: 在外部加载的HTML内,存在一个针对特定范围的click事件,该事件应调用存在于我的应用程序中的回调函数。 我该把 myCallback 函数放在哪里? 如果将其放在组件类中,则单击跨度时会收到以下错误,因为据我了解,该函数对外部加载的HTML不可见: Uncaught ReferenceError:在HTMLSpa

  • 问题内容: 我正在尝试创建一个JLabel数组,当单击它们时,所有这些标签都应该变为不可见。当试图通过需要访问用于声明标签的循环的迭代变量的内部类设置鼠标侦听器时,就会出现问题。代码是不言自明的: 我以为我可以通过使用内部方法中的(或代替)内部调用来克服此问题,但我一直无法弄清楚。 编译错误是:从内部类内部访问局部变量i;需要宣布为最终` 我敢肯定,答案一定是我从未想过的愚蠢之举,或者我犯了一些小

  • 问题内容: 我有一个注册事件处理程序的构造函数: 但是,我无法在回调内部访问已创建对象的属性。看起来好像不引用创建的对象,而是引用另一个对象。 我也尝试使用对象方法而不是匿名函数: 但是也有同样的问题 如何访问正确的对象? 问题答案: 你应该知道什么 (又名“上下文”)是每个功能内的特殊关键字和它的值仅取决于 如何 调用函数,而不是如何/何时/何它被定义。它不受其他变量之类的词法作用域的影响(箭头