此代码存在一些问题,我认为是因为``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
})
}
}
错误消息 Error Message Link
答案 0 :(得分:1)
由于未绑定onClick
处理程序,因此触发了错误 this.setState不是函数。结果,this
指向window
对象,而不是React类组件的实例。并且window
对象没有setState()
函数作为其属性-这就是错误消息所说明的内容。
要解决此错误,请使用类构造函数中的bind处理程序onClick
或使用箭头功能的rewrite处理程序。
在setState
内使用componentDidUpdate
不会造成无限循环。
答案 1 :(得分:1)
作为winwiz1的补充。 (他说的是正确的。)
您正在比较componentDidUpdate函数中的两个对象。 用!==比较两个对象将不起作用。 为何无法正常工作的答案可以在这里找到:Comparing two objects
解决方案是使用isEqual的lodash,示例可在此处找到: Depp comparison between 2 objects