2016-10-23 23 views
2

私はテキストを1つ持っており、クリックするたびにそのオブジェクトの次のアイテムにテキストが変化します。私はまた、私はこのような多次元配列を使用するテキストを言って1名を必要とする:React Nativeのオブジェクト

let texts = { 
    0:{ 
    "name" : "Bob", 
    "text" : "Hello, this is a text", 
    }, 
    1:{ 
    "name" : "Peter", 
    "text" : "Hey there.", 
    }, 
}; 

これは私の状態です:

this.state = { 
    textNumber: 0, 
}; 

そして、これは私がたonPressを呼び出す関数です。

nextScene =() => { 
     if(this.state.textNumber >= Object.keys(texts).length-1){ 

     } 
     else{ 
     this.setState({textNumber: this.state.textNumber+1}) 
     } 
    }; 

これは完全に私が望むように動作します。しかし、私の質問は、これはReact Nativeでやるべきことでしょうか?それとも良い方法がありますか?その後

let texts = [ 
    { 
    "name" : "Bob", 
    "text" : "Hello, this is a text", 
    }, 
    { 
    "name" : "Peter", 
    "text" : "Hey there.", 
    }, 
]; 

を行うことができます:

+0

ローカル状態を使用して現在の番号を保持しています。これは、アプリケーションの他のコンポーネントからアクセスするまでは問題ありません。それらをグローバルな状態に維持するには[redux](https://github.com/reactjs/redux)が必要な場合があります。 – Takahiro

+0

あなたが持っているのは配列ではなく、多次元のオブジェクトです。これは配列のような振る舞いとメソッドが(push、mapなどのように)存在することを期待している場合には注意する価値があります – Pineda

答えて

1

はおそらく、オブジェクトの配列が欲しい

if(this.state.textNumber < this.state.texts.length-1) { 
    this.setState({textNumber: this.state.textNumber+1}); 
} 

あなたはループをしたい場合は、以下の操作を行うことができます

this.setState({textNumber: this.state.textNumber+1 % this.state.texts.length}); 

あなたの質問については、これをReact Nativeで行うかどうかに違いはありません。これは単なるJSです。

状態(ReactまたはRNの両方)にこれを保存しても問題ありません。より洗練された解決策が必要な場合は、HOCを記述してコンポーネントの状態を管理することができます(例えば、recompose参照)。

+0

ありがとう、これは私の質問に答えました –