使用效果与消防器材



我正在尝试执行以下操作,我不会得到任何错误,但奇怪的是,当第一个条件下的setRivalGuesssetRivalGuess(doc.data().guess2)不起作用时,第二个条件下setRivalGuess(doc.data().guess1)起作用非常好。我检查了数据库,所有的东西都存储得很好,也就是说,我想获取的每个数据都在数据库中可用。我不知道这是否与我使用useEffect的方式有关。

const { rivalGuess, setRivalGuess } = useGame(); 
const game = query(roomColRef, where("roomId", "==",  roomId))
useEffect(() => {
const getUsers = async () => {
const data = await getDocs(game);
data.forEach((doc)=> {
if (doc.data().numberOfPlayers == 2 ){
if(userValue == doc.data().players[0].username)
if (doc.data().guess2 =! 0){
setRivalGuess(doc.data().guess2)}
if (userValue == doc.data().players[1].username) 
if (doc.data().guess1 =! 0){ 
setRivalGuess(doc.data().guess1)} }})};
getUsers();
}, [ rivalGuess, setRivalGuess ])

rivalGuess在全局状态之前,但知道它在钩子中。

const UseRivals = (collectionStr) =>{
const [ rivalGuess,  setRivalGuess ] =useState([])
const { roomId, userValue } = useGame()
useEffect(() => {
const collectionRef = collection(db, collectionStr);
const q = query(collectionRef, where("roomId", "==", roomId ))
const unSub = onSnapshot(q , (snapshot) => {
snapshot.docs.forEach(doc => {
if (doc.data().numberOfPlayers==2) {
if (userValue == doc.data().players[0].username) if (doc.data().guess2 =! 0) 
{ setRivalGuess(doc.data().guess2) }
if  (userValue == doc.data().players[1].username) if  (doc.data().guess1 =! 0)
{ setRivalGuess(doc.data().guess1)}}})
}, (err) => {
console.log(err.message);
});
return () => unSub();
}, [collectionStr]);

return { rivalGuess };
}
export default UseRivals;

最新更新