2017-08-25 9 views
0
renderItems(game){ 

    if (game.category_id === 2) { 
     ownedGames.map((owned_game) => { 
      if (owned_game.game_id === game.game_id) { 
       renderPriceSection = renderOwned 
       console.log(owned_game.game_title) 
      } else { 
       renderPriceSection = renderPrice 
      } 
     }) 
    } else { 
     renderPriceSection = renderFreeToPlayTitle 
    } 

} 
... 
return(
    {renderPriceSection} 
) 

にのみ最後の項目が表示されている反応:は、私はいくつかのラベルを表示しようとしている配列

console.logFreeがすべて正しいのゲームを表示しているOwned$PriceOwnedラベルを持つべきです。

ただし、Ownedラベルはowned_gamesアレイの最後のアイテムにのみ表示されます。

これはなぜ起こっているのですか?


編集:

私はrenderItems()機能を削除し、これで{renderPriceSection}を置き換え:

{game.category_id === 2 ? 
     ownedGames.map(owned_game => 
      owned_game.game_id === game.game_id ? renderOwned : renderPrice 
     ) : 
     renderFreeToPlayTitle 
    } 

を今renderOwnedrenderPriceは、各項目のowned_games.length回表示されています。
今私は間違った出力の反対側にいる:))

+0

これは、すべてのマップの繰り返しでrenderPriceSectionが上書きされるために発生します。また、これはマップを使用する正しい方法ではありません、マップは配列を返します。配列がどのように見えるか、期待される出力が何かを示すならば、おそらく助けてくれるでしょう。 –

+0

ラベルは最後のアイテム同じことを考えていた。それがそれを上書きしていること。しかし、これを行うより良い方法を考えることはできません。 –

+0

私はforループの代わりに 'map'を使用しています。私は質問を更新しました。 –

答えて

0

Array.mapは別の配列を返します。 mapの機能の中に何も返されていないようです。また、renderPriceSelectionさんが何をすべきかは不明です。

renderPriceSelection = ownedGames.map((owned_game) => { 
    if (owned_game.game_id === game.game_id) { 
    return renderOwned 
    } else { 
    return renderPrice 
    } 
}) 

render {renderPriceSelection} 
+0

'renderPriceSection'は、価格、フリーラベル、または所有ラベルのいずれかをレンダリングする最終的な値です。私は非常に小さな規模で再現しようとしています。 –

+0

私が記述した方法と同様のマップを使用し、 'console.log(renderPriceSelection)'を使って、これがあなたが望むものかどうかを確認してください。 – mersocarlin

0

はあなたが同じオブジェクトを変更している他のすべての繰り返しでrenderPriceSectionの同じ参照を変更しているので、あなたは新しいものを作成していません。このコードから

0

それは完全には明らかではないが、あなたが各反復で変数renderPriceSectionを書き換えるように思われ、それはrenderItemsが最後の要素を返す理由たび

0

あなたはANの形でrenderPriceSelectionを格納します配列を以下のようにして、与えられた関数から値を返すときにこの配列をレンダリングします。ここではリスト要素として返しました。それが役に立てば幸い。

renderItems(game){ 

    renderPriceSection = []; 

    if (game.category_id === 2) { 
    ownedGames.map((owned_game) => { 
     if (owned_game.game_id === game.game_id) { 
      renderPriceSection.push(renderOwned); 
      console.log(owned_game.game_title) 
     } else { 
      renderPriceSection.push(renderPrice); 
     } 
     }) 
    } else { 
     renderPriceSection.push(renderFreeToPlayTitle); 
    } 

} 

... 
return(
    <ul> 
     {renderPriceSection.map((eachPrice) => <li>eachPrice</li>)} 
    </ul> 
) 
関連する問題