2017-10-19 9 views
0

グリッド内の2つの列にリストを交互に表示したいとします。私はコンポーネントの状態でフラ​​グ変数を使用し、CardDetailを返すたびにその値を変更します。ネイティブレンダリングコンポーネントを反応させる代わりに、状態を使用して

私はthis.changeState()ステートメントを意図したとおりに動作していないと考えてコメントしました。

私がこれを理解するのを手助けしてください、私はReact/React Nativeを初めて使っています。 ありがとうございます。

renderAlbums() { 
    return this.state.albums.map(album =>{ 
     this.rend2(album) 
    } 
    ); 
    } 
rend2(album){ 
if(this.state.flag === 0) 
{ 
    //this.changeState(); 
    return (<CardDetail key={album.title} album={album} />); 
} 
else 
{ 
//this.changeState; 
return (<View />); 
} 
} 

changeState(){ 
    if(this.state.flag === 0) 
{ 
this.setState({flag:1}); 
} 
else 
{ 
    this.setState({flag:0}) 
} 
} 

    render() { 
    console.log(this.state); 

    return (

     <ScrollView> 
     <Grid> 
     <Col>{this.renderAlbums()}</Col> 
     <Col>{this.renderAlbums()}</Col> 

     </Grid> 
     </ScrollView> 
    ); 
    } 
} 
+0

あなたはカッコで囲まれた 'changeState'をトリガーしています。多分これは問題ですか?また、すべてのレンダリングで 'changeState'を呼び出すと、コードに無限ループが発生します。 – mersocarlin

+0

私はかっこなしで 'changeState'を呼び出していました。それを変更しました。しかし、まだ動作しません。シミュレータは空白になります。ですから、無限ループの問題を修正するために、私は何を変えるべきですか? –

+0

あなたは何をしたいのか分からない。 2つのリストがあり、 'CardDetail'がレンダリングされるたびに何らかの状態を変更する必要がありますか? – mersocarlin

答えて

1

この場合、状態を変更する必要はありません。ちょうどあなたのrenderAlbums()メソッドにパラメータを渡すと、リスト内の他のすべてのアルバムを選択するためにそれを使用します。

renderAlbums(col) { 
    return this.state.albums.map((album, index) => { 
    if (index % 2 == col) 
     return (<CardDetail key={album.title} album={album} />); 
    else 
     return (<View/>); 
    }); 
} 

は、その後、あなたのrender()方法で:

render() { 
    return (
    <ScrollView> 
     <Grid> 
     <Col>{this.renderAlbums(0)}</Col> 
     <Col>{this.renderAlbums(1)}</Col> 
     </Grid> 
    </ScrollView> 
); 
} 

このコードは、テストされていないが、それはすべき作業。

1

多分アプローチを少し変えて、両方の列を同時にレンダリングしてください。だから、CardDetailをレンダリングする列を切り替えることができます。

return (
    <ScrollView> 
    <Grid> 
     {this.state.albums.map((album, index) => 
     <View key={index}> 
      <Col>{index % 2 === 0 
      ? <CardDetail key={album.title} album={album} /> 
      : <View /> 
      }</Col> 

      <Col>{index % 2 !== 0 
      ? <CardDetail key={album.title} album={album} /> 
      : <View /> 
      }</Col> 
     </View> 
     } 
    </Grid> 
    </ScrollView> 
関連する問題