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

更改时出现反应错误。setState不是函数[重复]

聂季同
2023-03-14

我想知道如何修复以下错误:

onChange={this.handleName}

我知道我应该在构造函数内部进行绑定,也不能在onChange内部进行绑定,有什么想法吗?

class Register extends React.Component {
  constructor(props: Props) {
    super(props)
    this.state = {
      name: '',
      surname: '',
      email: '',
    }
  }
  handleName(e) {
    this.setState({ name: e.target.value })
  }
  render() {
    return (
      <Dialog className={classes.root} open={isOpen}>
      <TextField label="NAME" onChange={this.handleName} fullWidth />
      </Dialog>
    )
  }
}

共有3个答案

江奕
2023-03-14

以箭头函数的形式生成handleName,从而将被引用到组件实例

HandleName=(e)=

督阿苏
2023-03-14

您需要将handleName绑定到this

而不是:

onChange={this.handleName}

这样写:

onChange={this.handleName.bind}

这是因为您正在将函数引用传递给onChange,因此当它执行时,它将超出您当前的范围,因为setState将不存在。

卫甫
2023-03-14

由于函数handleName未绑定到类,因此当前handleName中的this的范围是函数本身,而不是类。因此,该范围内没有setState函数。

要更正此错误,可以将函数的绑定放入构造函数中。

constructor(props: Props) {
    super(props)
    this.state = {
      name: '',
      surname: '',
      email: '',
    }

    this.handleName = this.handleName.bind(this,e);
  }

也可以使用箭头语法定义函数

handleName = (e)=> {
...
}
 类似资料:
  • 问题内容: 有人可以解释一下为什么 this.setState 不是函数吗? 我不明白为什么我的代码有错误 谢谢 问题答案: 这是问题。使用。

  • 我是React的新手,我正在尝试用API编写一个应用程序。我一直得到这个错误: TypeError:This.SetState不是函数 当我尝试处理API响应时。我怀疑这装订有问题,但我不知道如何修理它。下面是我的组件的代码:

  • 我正在用Bootstrap 4做一个react项目。引导程序已通过CDN导入。 我想要的是在满足条件的情况下显示/隐藏一个模态。我已经导入了jquery 在组件中 但是在执行上面的行时,它会显示一个错误,如 我读到了这个错误,它说可能是因为jquery与CDN和NPM一起导入了两次。我不确定原因是什么。但我也尝试过从一个方法导入jquery,但它不起作用。有什么建议吗?

  • 我正在一个WordPress网站上工作——它有大量的自定义代码和插件以及各种JQuery、引导和框架加载。 在最后一个加载页脚的最底部-I处: 我得到了错误: 显然,JQuery已经加载。我也尝试过在那里放置其他JQuery——除了加载的JQuery之外——我得到了相同的错误。 为什么我会得到$nota函数错误?

  • 问题内容: 所以我有这个: newDealersDeckTotal只是一个数字数组,例如,但是没有给出正确的总数,但是呢?我什至设置了超时延迟,以查看是否可以解决问题。任何明显的还是我应该发布更多代码? 问题答案: 通常是异步的,这意味着在您处于状态时,它尚未更新。尝试将日志放入方法的回调中。状态更改完成后执行:

  • 问题内容: 我正在做一个待办事项应用程序。这是违规代码的非常简化的版本。我有一个复选框: 这是调用复选框的函数: updateItem是映射为分派到redux的函数 我的问题是,当我调用updateItem操作并在console.log状态时,它总是落后1步。如果未选中该复选框且该复选框不为true,则仍将状态为true传递给updateItem函数。我是否需要调用另一个函数来强制状态更新? 问题