我想找人帮忙处理我的密码。我目前正在开发一个测试应用程序。我需要从我的消防局数据库中得到我的问题和答案。但是,当我检索数据时,我总是得到未定义的错误不是一个对象(计算'_userDoc.incorrect_answer')来帮助我。
这是我的密码
import { StyleSheet, Text, TouchableOpacity, View, SafeAreaView, ScrollView, FlatList, Image, Alert, BackHandler } from 'react-native'
import { StatusBar } from 'expo-status-bar'
import React, { Component, useEffect, useState } from 'react'
import { doc, setDoc, Timestamp, getDoc } from "firebase/firestore";
import { auth,db } from '../config';
const shuffleArray=(array)=> {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}
const Quiz = ({navigation}) => {
const [isActive, setIsActive] = useState(false)
const[userDoc, setUserDoc] = useState();
const [options, setOptions] = useState([]);
const [loading, setLoading] = useState(false);
let docu = "question"+2;
const myDocs = doc(db, "subject", docu)
useEffect(()=>{
getQuiz();
},[])
const getQuiz = async()=>{
setLoading(true);
getDoc(myDocs)
.then((snapshot) =>{
if(snapshot.exists){
setUserDoc(snapshot.data())
setOptions(generateOptionsAndShuffle(userDoc))
}else{
alert("No Doc FOUND")
}
})
.catch((error)=>{
alert(error.message)
})
}
const generateOptionsAndShuffle=(_userDoc)=>{
let options = [..._userDoc.incorrect_answer];
options.push(_userDoc.correct_answer);
shuffleArray(options)
console.log(options)
return options
}
const thisHasPress=()=>{
setIsActive(current => !current);
}
let energy = 5;
let score =0;
return (
<SafeAreaView style={styles.container}>
<StatusBar style="dark" />
<View style={styles.headerContainer}>
<Text style={styles.headerText}>THIS IS QUIZ</Text>
</View>
<View style={styles.questionContainer}>
<Text style={styles.questionText}>{userDoc?.question || ''}</Text>
</View>
<View style={styles.buttonChoicesContainer}>
<TouchableOpacity style={ isActive ? styles.buttonChoicesSelected : styles.buttonChoices}>
<Text style={isActive ? styles.buttonChoicesTextSelected : styles.buttonChoicesText}>{options[0] || ''}</Text>
</TouchableOpacity >
<TouchableOpacity style={ isActive ? styles.buttonChoicesSelected : styles.buttonChoices} onPress={thisHasPress} >
<Text style={isActive ? styles.buttonChoicesTextSelected : styles.buttonChoicesText}>{options[1] || ''}</Text>
</TouchableOpacity>
<TouchableOpacity style={ isActive ? styles.buttonChoicesSelected : styles.buttonChoices} onPress={thisHasPress} >
<Text style={isActive ? styles.buttonChoicesTextSelected : styles.buttonChoicesText}>{options[2] || ''}</Text>
</TouchableOpacity>
<TouchableOpacity style={ isActive ? styles.buttonChoicesSelected : styles.buttonChoices} onPress={thisHasPress} >
<Text style={isActive ? styles.buttonChoicesTextSelected : styles.buttonChoicesText}>{options[3] || ''}</Text>
</TouchableOpacity>
</View>
<View style={styles.footer}>
<TouchableOpacity style={styles.footerButton} onPress={()=>{ navigation.navigate("Dashboard") }}>
<Image source={require('../assets/home-dark.png')}
style={styles.navIcons}
resizeMode="contain"/>
</TouchableOpacity>
<TouchableOpacity style={styles.footerButtonReversed} onPress={()=>{ if(energy!=0){energy=energy-5};score++; navigation.navigate("Result",{ energy: energy, score: score}); console.log(energy) }}>
<Text>SUBMIT</Text>
</TouchableOpacity>
</View>
</SafeAreaView>
)
}
export default Quiz我已经尝试过寻找许多解决方案,但这是行不通的。
发布于 2022-11-15 07:58:44
您可以尝试在getQuiz函数中替换这一行
setOptions(generateOptionsAndShuffle(snapshot.data()))https://stackoverflow.com/questions/74440192
复制相似问题