useState的问题是数据进入消防仓库的数据为空



我的目标是更新数据库中的数据,但每次使用useState发送数据时,它都会发送空白数据。此外,正如我所不理解的,当我将firebase信息打印到控制台时,它显示为+1 added。所以它看起来是最新的,但不在数据库中。这是什么原因?

export default postDetails = ({navigation, route}) => {

const levelColl = firestore().collection('Level');
const [levelData,setLevelData] = useState([]);


function  StoreLevelData (){
levelColl
.doc(user)
.get()
.then(documentSnapshot=>{
data=documentSnapshot.data();
labels=data.levelList.labels;
data1=data.levelList.data;
console.log(data)
let levelList1=[];
for (let index = 0; index < labels.length; index++) {
//console.log(labels[index],data[index])

if(labels[index] == 'araba'){
data1[index]+=0.0051
console.log(data1[index])   



}
levelList1.push({
levelList:{
labels:[labels[index]],
data:[data1[index]]
}

})
}
console.log(levelList1) 
setLevelData(levelList1)  
})
}
levelColl
.doc(user)
.set({
levelData})
useEffect(() => {

StoreLevelData();

} , []);

在此处输入图像描述

您不能设置状态然后立即访问新数据,因为在react中,setState是异步的。为了访问新设置的状态数据,必须等待下一次重新渲染。因此,在您的情况下,最好的做法是在下面创建一个新功能,如

const updateLevelList = (levelListData) => {
setLevelData(levelListData) // Update the state here
levelColl.doc(user)
.set({
levelListData // Use the same function arg instead of using state
})
}

调用这个用于设置状态的函数,即用updateLevelList(levelList1)替换setLevelData(levelList1)

相关内容

最新更新