javascript - React:如何改变变量的状态?
问题描述
我已经从 Firebase 实时数据库中查询了一些数据,现在我正在尝试将其添加到变量中。我确信查询有效,因为如果我 console.log(dataSnapshot) 它记录正确的数据(即 001)。但是,当我尝试使用该数字创建变量时,它不会返回任何内容。
这是我的代码的一部分:
class Table extends Component {
constructor(props) {
super(props);
this.state = { timestamps: [], user: auth().currentUser, serial: "" };
}
componentDidMount() {
const uid = this.state.user.uid;
console.log(uid);
const serial = this.state.serial;
const serialRef = db.ref(uid + "/serial");
serialRef.once("value").then(function (dataSnapshot) {
console.log(dataSnapshot.val());
this.setState({ serial: dataSnapshot.val() });
});
console.log(serial);
提前致谢!
解决方案
发生这种情况是因为您在更改其值(异步行为)之前将状态变量串行记录到控制台。因此,您将串行变量作为原始变量。
如果您希望在 setState 之后立即将您的状态变量 serial 记录到另一个变量中,请执行以下操作:
componentDidMount() {
const uid = this.state.user.uid;
console.log(uid);
let serial = this.state.serial;
const serialRef = db.ref(uid + "/serial");
serialRef.once("value").then(function (dataSnapshot) {
console.log(dataSnapshot.val());
this.setState({ serial: dataSnapshot.val() }, () => {
serial = this.state.serial
console.log(serial)
});
});
})
}
setState 接受回调作为可选的第二个参数。
推荐阅读
- python - 如何使用python tkinter中的按钮向上和向下滚动列表框项目
- sql - 如何将 MongoDb 查询从 SQL 转换为 NoSQL
- vbscript - VBScript 中的数组定义差异
- r - 在 R 中抓取网站(不带参数的 url)
- powershell - 如何使用 Foreach-Object 输出为目录中每个项目创建的时间差异?
- shell - 提取标签之间的数据
- qt - QGraphicsPathItem 橡皮擦 / 将 QGraphicsPathItem 分成两个新的
- javascript - 如何获取从具有 Object Promise 格式的异步函数接收到的值
- python-3.x - 在 Python 3 中除以 pandas DataFrame 中的 2 个整数列返回舍入整数而不是浮点数
- php - 托管 - 与以前的项目相同的错误