#react-native #random
#реагировать-родной #индекс
Вопрос:
Этот экран предназначен для упражнения на умножение, дается умножение, и вы должны ввести ответ в текстовый ввод и нажать кнопку ОК. Но проблема в том, что в моей функции compareQA qaindex возвращает 0 или -1.
import React, { useState, useEffect } from "react"; import { StyleSheet, Text, View, Pressable, TextInput } from 'react-native'; import { StatusBar } from 'expo-status-bar'; import { NavigationContainer } from '@react-navigation/native'; import styles from '../Components/AppStyle'; import {LittleSpace05,LittleSpace1, LittleSpace4} from '../Components/LittleSpace'; import changeSize from '../Components/ChangeSize'; function RouletteExercice1 ({ route, navigation }){ const { multiplyArray, multBy} = route.params; const [adaptTitleFontSize, setAdaptTitleFontSize] = useState({ fontSize: 16, }); const [adaptButtonFontSize, setAdaptButtonFontSize] = useState({ fontSize: 16, }); const getSize = (event, divide, thing) =gt; { if (thing == 'title') { setAdaptTitleFontSize(changeSize(event.nativeEvent.layout, divide)) } else { setAdaptButtonFontSize(changeSize(event.nativeEvent.layout, divide)) } }; const [questionsArray,setQuestionsArray] = useState([]); const [answersArray,setAnswersArray] = useState([]); const [mQuestion,setMQuestion] = useState(); const [qaIndex,setQAIndex] = useState(0); const [textInputAnswer, setTextInputAnswer] = useState(); useEffect(() =gt; { createQuestionsArray(); },[]); function createQuestionsArray() { let m = 0; while (m lt; multiplyArray.length) { let b = 1; while (b lt; multBy 1) { let quest = multiplyArray[m] 'x' b; let rep = multiplyArray[m]*b; setQuestionsArray((prev) =gt; [...prev, quest]); setAnswersArray((prev) =gt; [...prev, rep]); b } m } askQuestion(); } function askQuestion(){ setMQuestion(questionsArray[Math.floor(Math.random()*questionsArray.length)]); } function compareQA(){ setQAIndex(questionsArray.indexOf(mQuestion)); if (answersArray[qaIndex]==textInputAnswer) { questionsArray.splice(qaIndex,1); answersArray.splice(qaIndex,1); console.log(qaIndex); askQuestion(); } } return( lt;View style={{ flex: 1, flexDirection: 'column'}}gt; lt;StatusBar style="auto" /gt; lt;View style={{flex: 1}}gt; lt;/Viewgt; lt;View style={{flex: 4, alignItems: 'center', justifyContent: 'center'}}gt; lt;LittleSpace1/gt; lt;LittleSpace1/gt; lt;View onLayout={(event) =gt; {getSize(event,2,'title')}} style={[styles.setViewRE1, {alignItems: 'center'}]}gt; lt;Text style={[styles.textExercice, adaptTitleFontSize,{fontWeight: 'bold'}]}gt;{mQuestion}lt;/Textgt; lt;/Viewgt; lt;LittleSpace05/gt; lt;View style={[styles.setViewRE1, {alignItems: 'center'}]}gt; lt;Text style={[styles.textExercice, adaptTitleFontSize,{fontWeight: 'bold'}]}gt;=lt;/Textgt; lt;/Viewgt; lt;LittleSpace05 /gt; lt;View onLayout={(event) =gt; {getSize(event, 3,'button')}} style={styles.setViewRE1}gt; lt;LittleSpace4/gt; lt;TextInput onChangeText={text =gt; setTextInputAnswer(text.replace(/[^0-9]/g, ''))} value={textInputAnswer} placeholder=" perso" textAlign={'center'} keyboardType="numeric" style={[ styles.inputRE1, adaptButtonFontSize]} type='number' /gt; lt;LittleSpace1/gt; lt;Pressable style={styles.buttonRE1} onPress={() =gt; {compareQA();}} gt; lt;Text style={[styles.textExercice, adaptButtonFontSize]}gt;OKlt;/Textgt; lt;/Pressablegt; lt;LittleSpace1/gt; lt;/Viewgt; lt;LittleSpace1/gt; lt;LittleSpace1/gt; lt;LittleSpace4/gt; lt;/Viewgt; lt;View style={{flex: 1,}}gt; lt;/Viewgt; lt;/Viewgt; ) } export default RouletteExercice1;
мультиплеЕрный массив = [35,17] мультби = 5
Функция createQuestionsArray создает список умножения [35×1,35×2,35×3,35×4,35×5,17×1,17×2,17×3,17×4,17×5].
Функция askQuestion должна выполнять случайное умножение из списка вопросов, но когда я сравниваю его с ответом, он не работает.
Может кто-нибудь сказать мне, что не так в моем коде? Пожалуйста.
Ответ №1:
Если вы не хотите createQuestionsArray
запускать каждый рендеринг, это:
useEffect(() =gt; { createQuestionsArray(); });
должно быть
useEffect(() =gt; { createQuestionsArray(); }, []);
Это, вероятно, приведет к многочисленным повторным визуализациям, учитывая, что вы устанавливаете состояние внутри этой функции.
Комментарии:
1. Спасибо, это помогает, но у меня все еще есть проблемы с остальной частью моего кода ^^