javascript - 反应类组件不更新状态
问题描述
我有一个 SubmitEvent 类组件,它使用服务类来使用 Axios 检索场所。
export default class SubmitEvent extends React.Component {
constructor(){
super();
this.state = {
loggedIn: undefined,
venues: []
}
this.checkLoggedIn.bind(this);
this.getVenues.bind(this);
}
checkLoggedIn = () => {
let token = localStorage.getItem("auth-token");
if (token === "") {
return false;
}
return true;
};
getVenues = async () => {
let res = [];
await Axios.get("/venues",{
headers:{
"Content-Type":"application/json",
}
})
.then((response) =>{
res = response.data
console.log(res)
})
.catch(err => console.log(err))
return res;
}
componentDidMount() {
this.setState({
loggedIn: this.checkLoggedIn(),
venues: this.getVenues()
});
console.log(this.state.venues)
}
}
如果我在控制台记录 getVenues 方法中的返回值,则会显示响应。尽管在 componentDidMount() 中,场所的状态是一个空数组。为什么会发生这种情况,我该如何解决?
解决方案
你需要在setState
里面then
:
getVenues = async () => {
let res = [];
await Axios.get("/venues",{
headers:{
"Content-Type":"application/json",
}
})
.then((response) =>{
res = response.data
console.log(res)
this.setState({venues: response.data})
})
.catch(err => console.log(err))
return res;
}
由于方法的关键字,您实际上返回的venues
是componentDidMount
一个承诺。async
getVenues
推荐阅读
- arrays - Julia 1.1 如何使用JDL或JDL2主动将索引矩阵数据写入磁盘文件?
- r - 如何为几列添加 ggplot2 图例?
- sql-server - 找不到存储过程 ISDATE
- markdown - 可以使用 pandoc 为降价生成控制台突出显示吗?
- reactjs - 需要帮助设计 MaterialUI MenuItem 组件
- sql - SQL如何加入2个表并返回具有特定过滤器的行
- python-3.x - 如何使用 Python 检测 Opencv 中的黑框
- exception - PHPMailer 最近停止通过 gmail 发送电子邮件
- qt - 用于 QT 编译的 Dockerfile:找不到 ./configure
- javascript - 带有动态内容的模态弹出窗口会删除样式/脚本