Quiero hacer una aplicación de prueba.
Las preguntas se verifican después de que el usuario presiona el botón Enviar.
Entonces, las preguntas se revisan todas a la vez al final.
Necesito guardar las opciones del usuario (respuestas) para cada pregunta y luego verificarlas al enviarlas.
Estaba pensando en esto:
let [currentQuestionIndex, setCurrentQuestionIndex] = useState(0); let [userAnswers, setUserAnswers] = useState([] as any); function answerClick(value: any, key: any) { // console.log('answer clicked'); userAnswers[currentQuestionIndex][key] = value; // TypeError: undefined is not an object (evaluating 'userAnswers[currentQuestionIndex][key] = value') }Mi casilla de verificación para cada posible respuesta en la pregunta:
<BouncyCheckbox key={index} onPress={(value) => { answerClick(value, index); }} text={answer.title} />pero lo consigo
TypeError: undefined is not an object (evaluating 'userAnswers[current][key] = value')en Responder clic
¿Qué es setUserAnswers() equivalente de userAnswers[currentQuestionIndex][key] = value ?
¿Por qué recibo un error indefinido?
Cómo hacer esto, por favor ayuda, me duele la cabeza.
En primer lugar, las respuestas de userAnswers deben tener la clave y los valores de todo lo que está tratando de cambiar. La razón por la que no está definido es porque está tratando de apuntar a un objeto en la matriz de userAnswers de usuario que no se puede encontrar. Además, está modificando el estado de userAnswers directamente y eso es realmente incorrecto. Para eso está setUserAnswers . Puedes hacer esto en su lugar.
function answerClick(value: any, key: any) { // console.log('answer clicked'); setUserAnswers([ ...usersAnswers, {[key]: [value]} ]); }Está intentando acceder a un índice no existente en la matriz.
userAnsqers = []; currentQuestionIndex = 0; // userAnswers[currentQuestionIndex] === undefined Lo que intenta hacer es agregar un {} a la matriz de forma perezosa (solo cuando sea necesario). Esto funcionará:
function answerClick(value: any, key: any) { setUserAnswers(latest => { const out = [...latest]; while (out.length <= currentQuestionIndex) out.push({}); out[currentQuestionIndex][key] = value; return out; }) } No hay nada equivalente a setUserAnswers() para userAnswers[currentQuestionIndex][key] = value ( ver ). Puede encontrar algunos ganchos personalizados para administrar arreglos o crear los suyos propios.