2017-05-15 15 views
1

画面上にコンポーネントをレンダリングしようとしていますが、トップダウンのような動作があります。render()で別々のコンポーネントをレンダリングする

コード:

render() { 
    this.renderFirstComp(); // stuff in the header 
    this.renderSecondComp(); 
    this.renderThirdComp(); 

    if(some condition){ 
     return(<Text> something </Text>) 
    } 
    else { 
     return(<Text> something else </Text>) 
    } 
} 

renderFirstComp() { 
    let tests = ['1', '2', '3', '4', '5']; 

    return(
     <View> 
      <Text> Test #: </Text> 
      <Text>{tests[this.state.selectedTest]} </Text> 
     </View> 
    ) 
} 

renderSecondComp(){ 
    return .....; 
} 

renderThirdComp(){ 
    return .....; 
} 

しかし、このルーチンが動作しない(何もレンダリングされません取得されます)。正しいパターンに従っていますか?

編集: 私は上記のすべてをレンダリングする:FirstComp、秒、第三... if文の内側のもの。

答えて

4

問題:あなたはrender方法から何かを返されていません

1.は、機能のみの要素を返しています。

2.あなたはrenderメソッドから複数の要素を返すことはできませんので、あなたはdiv内にそれらをラップする必要があります。

使用この:

render() { 
    return(
     <div> 
      {this.renderFirstComp()} 

      {this.renderSecondComp()} 

      {this.renderThirdComp()} 

      { 
      condition ? <Text> something </Text> : <Text> something else </Text>   
      } 
     </div> 
    ) 
} 

もう一つの可能​​な方法:

このように、関数によって返された要素を保存し、それらの変数をレンダリングするために変数を使用します。

render() { 
    let first = this.renderFirstComp(); 
    let second = this.renderSecondComp(); 
    let third = this.renderThirdComp(); 
    let additionalElement = this._renderAdditionalElement() 
    return(
     <div> 
      {first} 
      {second} 
      {third} 
      {additionalElement} 
     </div> 
    ) 
} 

_renderAdditionalElement(){ 
    if(true){ 
     return(<Text> something </Text>) 
    }else{ 
     return(<Text> something else </Text>) 
    } 
} 
+0

参照してください。編集されました。ありがとう –

+0

返された要素をレンダリングするために関数を呼び出すと、更新された答えをチェックし、追加の要素をレンダリングするために条件を使用するか、同じパターンを使用して関数を呼び出してその中に条件を入れて要素を返します。 –

+0

私はWeb上にないので、 'div'を' View'に変更することで修正されました。私はモバイルアプリケーション上にいます –

関連する問題