首页 > 解决方案 > this.setState 在 componentDidUpdate 中不起作用

问题描述

这段代码有一些问题,我认为是因为 setState 在这段代码中不起作用。

this.setState({ 
  showTooltip: true, 
  toolTipsValue: message, 
  error: true 
})

在单击按钮之前

this.props.loginRes = {
  responseCode: 1, 
  result: {}
}

点击按钮后

prevProps.loginRes = {
  responseCode: 1, 
  result: {}
}
this.props.loginRes = {
  responseCode: 1,
  result: { 
    data: {}, 
    statusCode: 1, 
    statusMessage: 'Invalid email/mobile' 
  }
}
componentDidUpdate(prevProps, prevState) {
  if (this.props.loginRes !== prevProps.loginRes) {
    const message = this.props.loginRes.result.statusMessage;
    this.setState({
      showTooltip: true,
      toolTipsValue: message,
      error: true
    })
  }
}

错误信息 错误信息链接

标签: javascriptreactjssetstate

解决方案


由于您没有绑定处理程序,因此触发了错误this.setState is not a functiononClick。结果this指向window对象而不是 React 类组件的实例。并且该window对象没有setState()作为其属性的功能 - 这就是错误消息所说的。

要修复此错误,请在类构造函数中绑定处理程序或使用箭头函数重写处理程序。onClick

以您所做的方式使用setStateinsidecomponentDidUpdate不应导致无限循环。


推荐阅读