为什么react钩子集函数无法设置状态



setDoctorDetails不工作。我试着在从云消防商店获得数据后设置它。我正在使用react native并努力找到问题

import React, { useState, useEffect } from 'react';
import { View, Text } from 'react-native';
import { collection, query, where, getDocs } from 'firebase/firestore';
import { db } from '../../firebase/firebaseCofig';
export default function FilteredDoctorsScreen({ route, navigation }) {
const { specialist } = route.params;
const [doctorDetails, setDoctorDetails] = useState([]);
useEffect(() => {
(async function () {
const q = query(
collection(db, 'Doctors'),
where('specialist', '==', specialist)
);
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
setDoctorDetails(doc.data());
});
console.log('DoctorDetails', doctorDetails);
})();
}, []);
return <Text>FilteredDoctorsScreen</Text>;
}
querySnapshot.forEach((doc) => {
setDoctorDetails(doc.data());
});

每次通过这个循环,您都会覆盖以前的状态,所以最终只会得到上一个文档中的数据。如果你想要一个所有数据的数组,做这个

setDoctorDetails(snapshot.docs.map(doc => doc.data()))

p.S,以下日志语句将始终注销旧状态,而不是新状态:

console.log('DoctorDetails', doctorDetails);

因此,如果您想注销新状态,请将其分配给一个变量并注销该变量:

const newDoctorDetails = snapshot.docs.map(doc => doc.data());
cvonsole.log('newDoctorDetails', newDoctorDetails);
setDoctorDetails(newDoctorDetails);

或者将日志语句放在组件的主体中,以便在组件重新发送时注销。

const [doctorDetails, setDoctorDetails] = useState([]);
console.log('rendering', doctorDetails);

最新更新