2016-06-23 2 views
2

私はReactとFont Awesomeを使って星の列を作成しています。私は数をとり、多くの星を作り出す関数を持っています。私は反応コンポーネント内でこれを行う最善の方法を見つけることを試みています。基本的に、私はそれが渡されているものに基づいて動的に繰り返すように取得する数でJSX要素を乗算する必要があります。JSXを乗算または連結することはできますか?

reviewStars(num) { 
    const star = <i className="fa fa-star" aria-hidden="true"></i>; 
    const getStarCount = star.repeat(num); 
    return getStarCount; 
    }; 

JSXはこれがうまくいく、文字列だった場合、それはありませんので、Iその上で繰り返しを呼び出すことはできません(エラーはスターは関数ではありません)。私はそれを一重引用符で囲むことができますし、それらを置き換えることができますが、これにはより良い扱いがあるのでしょうか?ありがとう。

答えて

2

このような何かを試してみてください:

reviewStars(num) { 
    let stars = []; 
    for(let i= 0; i < num; i++) { 
    stars.push(<i key={i} className="fa fa-star" aria-hidden="true"></i>); 
    } 
    return (
    <div>{stars}</div> 
); 
}; 

編集: はJSXの有効性を維持するためにリスト

+1

ありがとうございます。私もこのループのようなものを試してみました。そのような要素の配列(

{stars}
)をレンダリングできるだけのことは考えていませんでした。ありがとう! – hidace

2

にキーを追加することを忘れないでください、あなたは最初に親に兄弟要素をラップする必要があります要素、<span>または<div>です。

その後、num回ループし、星のためにJSXを繰り返して、そのラッパーの中に戻る変数に蓄積しなければなりません。このような

何かがあなた

reviewStars(num) { 
    let stars = []; 

    for (let i = 0; i < num; i++) { 
     stars.push(<i className="fa fa-star" aria-hidden="true" key={i} />; 
    } 

    return (
     <span> 
      {stars} 
     </span> 
    ); 
}; 
1

Array.from()メソッドのためにトリックを行う必要があります指定した長さを持つ配列を作成します。詳しくはMDNをご覧ください。

<div> 
{ Array.from({ length: num }, (_, i) => 
    <i key={i} className="fa fa-star" aria-hidden="true"></i>) } 
</div> 

マッパーは、第2引数(インデックス)から各子要素にキーを割り当てます。

+0

質問を改善するための説明や参照は気をつけてください。 – dakab

+0

がMDNリンクで更新されました。 – xyc

+0

ありがとう、私はこのようなエレガントなソリューションを正確に探していました。 –

関連する問題