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

TypeError:evt.target在函数setState中为null

卜和悌
2023-03-14
问题内容

这两个功能之间的主要区别是什么?

handleOnChange(evt) {
    this.setState(() => ({
        tickerName: evt.target.value
    }));
}

handleOnChange(evt) {
    this.setState({ tickerName: evt.target.value });
}

为什么用直接更改状态的handleOnChange()函数可以正常工作?

<input
    type="text"
    value={this.state.tickerName}
    onChange={(evt) => this.handleOnChange(evt)} 
/>

当我使用第一个通过回调更改状态的函数时,出现以下错误:

TypeError: evt.target is null

问题答案:

这是setState的两种不同语法

第一:

handleOnChange(evt) {
    this.setState(() => ({
        tickerName: evt.target.value
    }));
}

使用updater函数作为第一个参数。

第二:

handleOnChange(evt) {
   this.setState({ tickerName: evt.target.value });
}

使用要更新的对象

在更新程序功能中使用综合事件时,需要使用 event.persist()

文档中

SyntheticEvent被合并。这意味着在调用事件回调之后,将重新使用SyntheticEvent对象,并且所有属性都将无效。这是出于性能原因。因此,您不能以异步方式访问事件。

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

你的拳头盒看起来像

handleOnChange(evt) {
    evt.persist();
    this.setState(() => ({
        tickerName: evt.target.value
    }));
}

或者,event.persist()您可以将事件存储在另一个对象中,而不是使用

handleOnChange(evt) {
    const value = evt.target.value;
    this.setState(() => ({
        tickerName: evt.target.value
    }));
}

PS: 仅当您希望基于prevState或更新当前状态时,才应为setState使用updater函数。props

CodeSandbox



 类似资料:
  • 简述 在某些情况下,React框架出于性能优化考虑,可能会将多次state更新合并成一次更新。正因为如此,setState实际上是一个异步的函数。 但是,有一些行为也会阻止React框架本身对于多次state更新的合并,从而让state的更新变得同步化。 比如: eventListeners, Ajax, setTimeout 等等。 详解 当setState() 函数执行的时候,函数会创建一个暂

  • 在这里反应newb。我有一个返回表单(表示组件)的纯函数。在这种表单中,我需要为那些受控制的文本字段处理onChange事件。FWIU,我需要这个。设置状态(...)在我的onChange事件处理程序中。但是,由于这是一个纯函数,我没有访问this.setstate()的权限。在ES2015函数中有没有一种很好的方法来设置这些onChange事件的状态?如果有帮助的话,我也在使用redux。示例代

  • 在async-nature-of-setState中我们已经提到过, setState其实是异步的. 因为出于性能优化考虑, React会将多次setState做一次批处理. 于是setState并不会在被调用之后立即改变我们的state. 这就意味着你并不能依赖于在调用setState方法之后state, 因为此时你并不能确认该state更新与否. 当然针对这个问题我们也有解决办法—用前一个st

  • 我试图在反应应用程序中显示时间,并希望以12小时的格式显示。 我编写了一个函数,如果小时数显示为13或以上,则删除“12”。我想将该函数传递到setState,但仍然会得到一个语法错误。 我希望看到下午1:31,但我只是在setState行中出现了语法错误。我无法忘记这一点。 除此之外,我在之前的状态下如何通过?

  • 问题内容: 有人可以解释一下为什么 this.setState 不是函数吗? 我不明白为什么我的代码有错误 谢谢 问题答案: 这是问题。使用。