728x90
StartGameScreen.js
import { TextInput, View , StyleSheet, Alert} from 'react-native';
import PrimaryButton from '../components/PrimaryButton';
import { useState } from 'react';
function StartGameScreen() {
const [enteredNumber, setEnteredNumber] = useState('');
function numberInputHandler(enteredText) {
setEnteredNumber(enteredText);
}
function resetInputHandler() {
setEnteredNumber('')
}
function confirmInputHandler() {
const chosenNumber = parseInt(enteredNumber);
if(isNaN(chosenNumber) || chosenNumber <= 0 || chosenNumber > 99) {
Alert.alert(
'메시지',
'입력을 확인해주세요.',
[{text: '확인', style: 'destructive', onPress: resetInputHandler}]) // 버튼으로 넘김
return;
}
}
return (
<View style={styles.inputContainer}>
<TextInput
style={styles.numberInput}
maxLength={2}
keyboardType='number-pad'
autoCapitalize='none'
autoCorrect={false}
value={enteredNumber}
onChangeText={numberInputHandler}
/>
<View style={styles.buttonsContainer}>
<View style={styles.buttonContainer}>
<PrimaryButton onPress={resetInputHandler}>취소</PrimaryButton>
</View>
<View style={styles.buttonContainer}>
<PrimaryButton onPress={confirmInputHandler}>확인</PrimaryButton>
</View>
</View>
</View>
);
}
...
confirmInputHandler 에서 한글로 변환 후
숫자로 변환되었는지 검증
isNaN(..) : 숫자가 아니면 true
앱 자체 API Alert 사용
PrimaryButton
import { View, Text , Pressable, StyleSheet} from 'react-native';
function PrimaryButton({ children, onPress }) {
return (
<View style={styles.buttonOuterContainer}>
<Pressable style={({pressed}) =>
pressed ? [styles.buttonInnerContainer, styles.pressed] : styles.buttonInnerContainer}
onPress={onPress} android_ripple={{color: '#640233'}}>
{/* props.children */}
<Text style={styles.buttonText}>{children}</Text>
</Pressable>
</View>
);
}
export default PrimaryButton;
...
...
...
PrimaryButton 에서 입력이 되면 onPress 실행
onPress로 넘어온 resetInputHandler 가 실행
'Front-end > React\RN' 카테고리의 다른 글
게임 화면 작업 - 노치 고려해 SafeAreaView 활용, 제목 컴포넌트 생성 (0) | 2023.08.15 |
---|---|
리액트네이티브, 화면 전환 (0) | 2023.08.14 |
리액트네이티브, 숫자 맞추기 앱 (커스텀 버튼, 누르기, 배경화면) (0) | 2023.08.07 |
리액트네이티브, 목표추가 모달, 추가, 지우기, 이미지 (0) | 2023.06.14 |
리엑트네이티브 프로퍼티, 컴포넌트 나누기 (0) | 2023.05.22 |
댓글