質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

860閲覧

Stateのデータを更新して使用したいです(React Native)

kaminiwa

総合スコア10

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/03/24 14:38

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

未検証ながら、

React

1 this.setState({number: +1});

の部分が、

React

1 this.state = {count:0,} 2 this.setState({ 3 count: this.state.count + 1, 4 })

のようなコードでカウントしていくのではないでしょうか。

投稿2021/03/28 17:00

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaminiwa

2021/03/30 14:32

ありがとうございました! 無事3問目へと進むことができました! seastar3様にご教示いただいたコードであればcount変数が常に新しいデータに変わる...という理解でよろしいでしょうか? 初心者の私でもすぐに解決できてとても助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問