Firebase On Value 获取状态反应挂钩



我正在使用Firebase和React hooks,我的问题是我需要检查我拥有的driverId是否仍在驱动程序列表中,但问题是在事件中,inputs.driverId为空,即使它已经有一个值,如果"打印"输入变量,所有fleld就像我声明初始状态时一样。

const initialState = {
driverId:'',
drivers: []
};
const [inputs, setInputs] = useState(initialState);
const getDrivers = () => {
const self = this;
const nameRef = firebase.database().ref().child('drivers').orderByChild('status');
nameRef.on('value', snapshot => {
var drivers = snapshot.val();
setInputs(inputs => ({...inputs, ['drivers']: drivers}));
console.log('dtiverId', inputs.driverId) // console response: dtiverId 
})
}

任何可以帮助我的东西,我需要在事件执行时检查选择的驱动程序(driverId(是否仍在列表中,但是当我检查驱动程序ID时,我得到null,仅在事件中

firebase.database()是一个异步调用。您需要像这样添加异步和等待

const getDrivers = aysnc () => {
const self = this;
const nameRef = await firebase.database().ref().child('drivers').orderByChild('status');
nameRef.on('value', snapshot => {
var drivers = snapshot.val();
setInputs(inputs => ({...inputs, ['drivers']: drivers}));
console.log('dtiverId', inputs.driverId) // console response: dtiverId 
})
}

你的代码中发生的事情是,你试图在从 firebase 返回之前使用 driverId(这就是为什么它是空的(。异步将阻止,直到 Firebase 返回,然后您的代码将恢复执行。

Firebase 实时数据库以异步方式工作。 您应该使用异步等待或承诺来获取数据。

中的示例 Firebase 文档展示了如何使用承诺获取数据。

相关内容

最新更新