首先,我检查是否支持Localstorage,如果是,我检查localstorage中是否有项目查询。如果有项目,则应更新为查询状态。在setState之前,我有一个警报,它会提醒项目。但是在setState之后我再次提醒但它什么都没显示?有人知道为什么吗?即使我用this.setState({query: localStorage.getItem("query")})
替换this.setState({query: 'test'})
,它也不会在警报中显示测试?
getLocalStorage = () => {
if (typeof(Storage) !== "undefined") {
if (localStorage.getItem("query") !== null) {
//Alerts 'a string'
alert(localStorage.getItem("query"));
this.setState({
query: localStorage.getItem("query")
});
//Alerts nothing?
alert(this.state.query);
this.search();
}
else{
this.getLocation();
}
}
else {
this.getLocation();
}
};
答案 0 :(得分:5)
setState不会显示直接更改,需要时间:
setState()并不总是立即更新组件。有可能 批量或推迟更新,直到稍后。这使得阅读this.state 在调用setState()之后发生了潜在的陷阱。相反,使用 componentDidUpdate或setState回调(setState(更新程序, 回调)),其中任何一个都保证在更新后触发 已经应用。如果需要根据以前的状态设置状态 state,请阅读下面的updater参数。
如果您想要设置状态值,则必须使用它:
this.setState({
query: localStorage.getItem("query")
},() => {
alert(this.state.query);
});
有关详情,请参阅setState
答案 1 :(得分:1)
setState是异步方法,因此您可以使用这种响应方式。所以对于这个bug你可以看到 -