在setState之后反应状态未定义? [复制]
Posted
技术标签:
【中文标题】在setState之后反应状态未定义? [复制]【英文标题】:React state undefined after setState? [duplicate] 【发布时间】:2018-04-07 19:35:52 【问题描述】:我有一个处理程序,它会在输入字段发生更改时触发。但是,当我将状态记录到控制台时,resData 是“未定义”吗?这是不可能的,因为 console.log(body) 确实会返回结果。
handlePersonNameChange(event)
var resData
request('https://swapi.co/api/people/?search='+event.target.value, function (error,response,body)
console.log(body)
resData = body
)
this.setState(personData: resData);
console.log(this.state)
【问题讨论】:
您应该在请求回调中设置状态。此外,在 React 中设置状态是异步的,所以你不能在下一行setState()
然后 console.log(this.state)
并期望看到状态更新。
在这种情况下,我得到 TypeError: this.setState is not a function
【参考方案1】:
this.setState( state : "new1" )
此方法不是同步的,因此当您记录状态时,它尚未更新。
您应该在 componentWillUpdate 生命周期方法中记录它。
【讨论】:
【参考方案2】:请求调用是异步的,您应该将this.setState
放在响应正文中。
另外this.setState
是异步的,要查看结果你应该使用回调函数。在设置新状态后调用此函数。
handlePersonNameChange(event)
var resData
request('https://swapi.co/api/people/?search='+event.target.value,
function (error,response,body)
console.log(body)
resData = body
this.setState(personData: resData, function()
console.log(this.state)
)
)
更多关于this.setState()
的信息可以在here找到
【讨论】:
【参考方案3】:你需要在请求回调里面setState
,例如:
request('https://swapi.co/api/people/?search='+event.target.value, function (error,response,body)
console.log(body)
resData = body
this.setState(personData: resData);
)
因为在您的示例中执行 setState
时,您的请求尚未解决。
【讨论】:
在这种情况下,我得到 TypeError: this.setState is not a function。 那是因为你的回调没有绑定。您可以使用箭头函数(如果您有 ES6 支持)(错误、响应、正文)=> this.setState(personData: body)以上是关于在setState之后反应状态未定义? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
反应:TypeError:无法读取未定义的属性“setState”
未处理的拒绝(TypeError):无法读取反应中未定义的属性“setState”(firestore)