2017-01-11 5 views
0

私は、変数を考慮して別の方法でリファクタリングする方法がわからないので、私のコードがかなり複製されていることに気付きました。JavaScriptでコードの重複を削除する

私は、メソッドのレンダリングに反応内でこれがコードです:/それはD/HまたはCであるかどうかまったく同じこと

リターン:私が言いたいものを効果的に

  if (card.suit == 'D' || card.suit == 'H'){ 
      return <div className="cardFormatDH" key={ index }> {card.rankKey}{card.suit} </div>; 
      } 
      else if (card.suit == 'C' || card.suit == 'S'){ 
      return <div className="cardFormatCS" key={ index }> {card.rankKey}{card.suit} </div>; 
      } 

のようなものですsでは、c/sが同じスタイルを持ち、d/hが同じスタイルを持つことを許可します。 はまた私の状態が非常に長い場合、私はあなたがgetCardClassname機能を書くことができ

+0

「JSXでのコードの複製の削除」という言葉は、普通のJavaScriptではこのようなことはほんのわずかなことですが、JSXの奇妙なことがあります! –

+1

JSXは一目瞭然ですが、それは奇妙なことが終わるところです。構文的な砂糖が行くので(それは非常に簡単です)(http://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=true&presets=es2015-loose%2Creact%2Cstage-0%2Cstage-1%2Cstage-2%2Cstage- 3&code =%3Cdiv%20className%3D%22 CardFormatDH%22%20key%3D%7Bindex%7D%3E%7Bcard.rankKey%7D%7Bcard.suit%7D%3C%2Fdiv%3E)これはJSXではあまり意味がありませんJavaScriptで。 –

答えて

1

をそれを短縮する方法を理解カント:

const cls = { 
    D: 'DH', 
    H: 'DH', 
    C: 'CS', 
    S: 'CS', 
}; 

function getCardClassname(suit) { 
    if (card.suit == 'D' || card.suit == 'H'){ 
    return "cardFormatDH"; 
    } 
    else if (card.suit == 'C' || card.suit == 'S'){ 
    return "cardFormatCS"; 
    } 
} 

return <div className={getCardClassname(card.suit)} key={ index }> {card.rankKey}{card.suit} </div>; 
4

あなたはsuit -> classNameマップを作成することができます値をクラス名の一部として使用してテーブル内のスーツを検索します。

if (cls[card.suit]) { 
    return <div className={`cardFormat${cls[card.suit]}`} key={ index }> {card.rankKey}{card.suit} </div>; 
} 
+0

は 'cardFormat $ {cls [card.suit]}' –

+0

でなければなりません@IslamIbakaev:あなたは正しいです。 –

0
// you can add more pairs here 
    const formats = [ ['D', 'H'], ['C', 'S'] ]; 

    for(let format of formats) { 
    if(format.includes(card.suit)) { 
     return (
     <div className=`cardFormat${format.join('')}` key={ index }> 
      {card.rankKey}{card.suit} 
     </div> 
    ); 
    } 
    }