React Nativeの初心者です。
○×問題集アプリを以下のような仕組みで作ろうと考えています。
①問題を○か×で回答する。
stateで「number=0」という値を宣言していて、配列からnumberの数字に該当する問題を呼び出します。
②回答ボタンをタップすることでSetStateでnumberの数字を+1して、配列から新しい問題を呼び出します
しかし、一度問題を回答すると、numberが0にリセットされているようで、第1問→第2問までは進みますが、第3問に進むことができません。
第1問(number=0)から+1を繰り返していると推測します。
stateのデータを更新して使用したいです。
(numberを0、1、2、3・・・と更新して+したい)
プログラムの問題点をご教示いただけましたら幸いです。
そもそもstate、setStateを使用して構築するものでない・・・ということでしたら失礼いたします。
React
1import React, {Component} from 'react'; 2import { StyleSheet, View, Text, Button, Alert } from 'react-native'; 3 4/* 問題、解答、解説の配列*/ 5const question = [ 6 ['第1問の問題です',1,'解説を記載します'], 7 ['第2問の問題です',2,'解説を記載します'], 8 ['とても長い文章を',2,'解説を記載します'] 9]; 10 11/* 問題のレイアウト*/ 12export default class App extends Component { 13 14 constructor(props){ 15 super(props); 16 this.state = {number: 0}; 17 } 18 19 render (){ 20 return ( 21 <View style={styles.base}> 22 <View style={{flex: 1}}></View> 23 <View style={{flex: 3}}> 24 <Text style={styles.title}>'問題:'{question[this.state.number][0]}</Text> 25 </View> 26 <View style={{flex: 2}}> 27 <View style={{flexDirection:'row'}}> 28 <View style={styles.buttonContainer}> 29 <Button title='○' onPress={this.doAction1}></Button> 30 </View> 31 <View style={styles.buttonContainer}> 32 <Button title='×' onPress={this.doAction2}></Button> 33 </View> 34 </View> 35 </View> 36 </View> 37 ); 38 } 39 40 /* 関数、○を選択した際の処理 */ 41 doAction1 = ()=>{ 42 if (question[this.state.number][1] == 1) { 43 Alert.alert('正解です!',question[this.state.number][2]); 44 } 45 else { 46 Alert.alert('不正解です・・・',question[this.state.number][2]); 47 } 48 this.setState({number: +1}); 49 } 50 51 /* 関数、×を選択した際の処理 */ 52 doAction2 = ()=>{ 53 if (question[this.state.number][1] == 2) { 54 Alert.alert('正解です!',question[this.state.number][2]); 55 } 56 else { 57 Alert.alert('不正解です・・・',question[this.state.number][2]); 58 } 59 this.setState({number: +1}); 60 } 61 62} 63 64/* スタイルシート */ 65 66const styles = StyleSheet.create({ 67 base: { flex:1, alignItems:'center', justifyContent: 'center'}, 68 title: { 69 borderStyle:'solid', 70 borderWidth:1, 71 padding:10, 72 margin:5, 73 fontSize:24, 74 color:'blue', 75 }, 76 buttonContainer: { 77 height: 75, 78 width: 75, 79 padding: 10, 80 borderWidth: 3, 81 borderColor: "black", 82 borderRadius: 10, 83 backgroundColor: 'blue', 84 margin: 5, 85 fontSize:50 86 } 87}) 88 89
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/30 14:32