javascript - 当我尝试检索它时,类组件中的状态变量未定义
问题描述
我有这个类组件:
import React, { Component } from 'react';
import '../styles/App.css';
import { openDB } from 'idb';
class MensaInfo extends Component {
constructor() {
super();
this.state = {
id: 0,
};
}
getMensaId = async () => {
var db = await openDB('PWA_DATA', 2);
var transaction = db.transaction(["user"], "readonly");
var store = transaction.objectStore('user');
var mensa = await store.get('lieblingsmensa');
this.id = mensa['lieblingsmensa'];
console.log(this.id)
db.close()
}
fetchMensa = async () => {
const data = await fetch(`https://openmensa.org/api/v2/canteens/${this.id}/`);
const info = await data.json();
}
update = () => {
this.getMensaId()
this.fetchMensa()
}
componentDidMount = () => {
window.addEventListener('load', this.update());
}
render() {
return (
<div className="dive">
{this.id}
</div>
)
}
}
export default MensaInfo;
我的 idb 中有一个 id,我尝试将其用于 api 调用,我可以从 idb 获取 id 并将其保存为状态变量,当我尝试在我的 api 调用函数中使用它时,它显示为未定义,甚至没有显示我设置的 0。getmensaid 中的控制台登录向我显示了正确的值,但我不能将它用于 api 在不同的组件中它以这种方式工作,但在这种情况下它不起作用。我究竟做错了什么?
解决方案
如我所见,您永远不会调用 this.setState。
getMensaId = async () => {
var db = await openDB('PWA_DATA', 2);
var transaction = db.transaction(["user"], "readonly");
var store = transaction.objectStore('user');
var mensa = await store.get('lieblingsmensa');
// I think the problem is here
this.setState({id: mensa['lieblingsmensa']});
//this.id = mensa['lieblingsmensa'];
console.log(this.id)
db.close()
}
推荐阅读
- apache-kafka - 多个消费者从单个 kafka 分区消费
- c# - 重构 LINQ 方法以引入 Lamba 函数作为参数
- javascript - 使用 w3schools 中可用的代码块为 asp 链接中的活动链接着色
- android - 有人可以解释一下我在这个滚动功能上做错了什么吗?
- ios - UIDatePicker:在选择日期时,它会跳转到任何随机日期
- javascript - 如何在主页中激活 Woocommerce 过滤器脚本
- reactjs - 如何仅在提交表单后而不是在用户输入 antd 时显示错误或验证消息?
- python - 在数据框中找到均值的更有效方法?
- ansible - 如何使用 ansible playbook 更改 Sonatype Nexus 的管理员密码
- .net - 我如何使用我的演示用户和密码通过链接自动登录?