#react-native
Вопрос:
Я пытаюсь запустить это приложение в react, но оно продолжает выдавать мне ту ошибку, что не может найти переменное направление. Как мне это решить? Код приведен ниже.
APP.js
// Importing Libs
import React, {useState} from 'react';
import { StyleSheet, View , SafeAreaView} from 'react-native';
import Header from './APP/Components/Header';
import StartGameScreen from './APP/Screens/StartGameScreen';
import GameScreen from './APP/Screens/GameScreen';
export default function App() {
const [userNumber, setUserNumber] = useState();
const startGameHandler = (selectedNumber) => {
setUserNumber(selectedNumber);
};
let content = <StartGameScreen onStartGame={startGameHandler} />;
if (userNumber) {
content = <GameScreen userChoice={userNumber} />;
}
return (
<View style={styles.screen}>
<Header title="GUESS THE NUMBER" />
{content}
</View>
);
}
const styles = StyleSheet.create({
screen: {
flex: 1
},
});
GameScreen.js
import React, {useState, useRef} from 'react';
import {View , Text , StyleSheet, Button, Alert} from 'react-native';
const generateRandomBetween = (min, max , exclude) => {
min = Math.ceil(min);
max = Math.floor(max);
const rndNum = Math.floor(Math.random() * (max - min)) min;
if (rndNum === exclude) {
return generateRandomBetween(min, max, exclude);
} else {
return rndNum;
}
};
const GameScreen = props => {
const [currentGuess, setCurrentGuess] = useState(generateRandomBetween(1, 99, props.userChoice));
const currentLow = useRef(1);
const currentHigh = useRef(99);
const nextGuessHandler = direction => {
if ((direction === 'lower' amp;amp; currentGuess < props.userChoice) || (direction === 'greater' amp;amp; currentGuess > props.userChoice) ) {
Alert.alert('Don't lie to me', 'You Can't Trick Me' [{text: 'I won't lie again , SORRY!', style: 'cancel'}]);
}
}
if ( direction === 'lower') {
currentHigh.current = currentGuess;
} else {
currentLow.current = currentGuess;
}
const nextNumber = generateRandomBetween(currentLow.current, currentHigh.current, currentGuess);
currentGuess(nextNumber);
return (
<View style={styles.screen}>
<Text>Opponent Guess</Text>
<View style={styles.guessNumberContainer}>
<Text style={styles.guessText}>{currentGuess}</Text>
</View>
<View style={styles.buttonContainer}>
<Button title="LOWER" onPress={nextGuessHandler.bind(this, 'lower')} />
<Button title="HIGHER" onPress={nextGuessHandler.bind(this, 'greater')} />
</View>
</View>
)
};
const styles = StyleSheet.create({
gameScreenContainer: {
width: 300,
maxWidth: '80%',
alignItems: 'center',
shadowColor: 'black',
shadowOffset: { width: 0, height: 2},
shadowRadius: 4,
shadowOpacity: 0.26,
backgroundColor:'#fff',
elevation: 8 ,
padding: 20,
borderRadius: 15,
marginTop: 30
},
guessNumberContainer:{
borderWidth: 2,
borderColor: "#FFC45D",
padding: 10,
borderRadius: 10,
marginVertical: 10,
alignItems: 'center',
justifyContent:'center',
width: 200
},
guessText:{
color: "#FFC45D",
fontSize: 22
},
screen:{
flex: 1,
padding: 10,
alignItems: 'center'
},
buttonContainer:{
width: 300,
maxWidth: '80%',
justifyContent: 'space-between',
alignItems: 'center',
shadowColor: 'black',
shadowOffset: { width: 0, height: 2},
shadowRadius: 4,
shadowOpacity: 0.26,
backgroundColor:'#fff',
elevation: 8 ,
padding: 20,
borderRadius: 15,
flexDirection: 'row',
marginTop: 20
}
});
export default GameScreen;
Я понятия не имею , как это исправить, даже не знаю, с чего начать. Я попытался изменить название направления на что-то другое , но все равно выдает ошибку, и я убедился, что React был импортирован, я понятия не имею, чего мне не хватает.
Комментарии:
1. В этой строке
if ( direction === 'lower') {
direction
переменная не существует. Это еще не определено. Возможно, этот блок кода должен находиться внутриnextGuessHandler
функции.2. Я немного новичок в этом, поэтому понятия не имею, что это значит. Итак, означает ли это, что я должен поместить if ( направление = = = «ниже»)……. в nextGuessHandler?
3. Это зависит от того, что вы хотите сделать. Если вы не писали код, то, вероятно, лучше спросить того, кто это сделал. Но причина ошибки в том, что
direction
на нее ссылаются перед объявлением.4. Хорошо , как мне объявить код направления там , я не был тем , кто написал код, это из учебника youtube, но я просто пробую его на практике
Ответ №1:
Основываясь на разговоре в комментариях, я предполагаю, что вы хотите чего-то подобного…
const nextGuessHandler = direction => {
if ((direction === 'lower' amp;amp; currentGuess < props.userChoice) || (direction === 'greater' amp;amp; currentGuess > props.userChoice) ) {
Alert.alert('Don't lie to me', 'You Can't Trick Me' [{text: 'I won't lie again , SORRY!', style: 'cancel'}]);
}
if ( direction === 'lower') {
currentHigh.current = currentGuess;
} else {
currentLow.current = currentGuess;
}
}
const nextNumber...
Комментарии:
1. Это сработало ! Я действительно ценю это ! эта ошибка теперь исчезла, но появилась новая ошибка, в которой говорится: «currentGuess не является функцией (в «currentGuess(следующий номер») что это значит, каково решение этой проблемы . Был бы очень признателен, если бы вы помогли мне и с этим
2. Если вы пытаетесь обновить значение
currentGuess
доnextNumber
, которое вам нужно использоватьsetCurrentGuess(nextNumber)
.3. Извините , что беспокою вас так сильно, ха-ха, теперь он говорит, что не может найти переменную setcurrentGuess, как мне ее объявить
4. Проверьте свой почтовый ящик. Это уже определено…
const [currentGuess, setCurrentGuess] = useState(...
5. Большое вам спасибо !! сейчас он работает идеально