2016-07-06 6 views
0

次のコードをもっときれいにしようとしています。具体的には、別の関数を使用してマップ関数に値を渡したいと思います。ここで 別の関数を使用してオブジェクトをマップ関数に渡します。

コードです:だから基本的に私はそこに別の方法を必要とする

... 
     this.props.slides.map((s)=>{ 
       let id = s.get('id') 
       let title = s.get('title') 
       let image = s.get('image') 
       let alt = s.get('alt') 
       let caption = s.get('caption') 
       return(

        <Carousel.Item key={id} > 
        <img width={900} height={500} alt={s.get('alt')} src={image} alt={alt}/> 
        <Carousel.Caption> 
         <h3>{title}</h3> 
         <p>{caption}</p> 
        </Carousel.Caption> 
        </Carousel.Item> 

      ) 
     })  
    } 
    </Carousel>) 
    } 
} 

... 

のような(それはクラスのすべての部分です):

listSlides(){ 
... 
} 

、その後、私はちょうど私のマップにそれを渡すことができます関数。しかし、私はそれを書く方法が不明です。私はmap()の動作についてちょっと混乱しています。

最初のパラメータは配列の各アイテムに渡されている関数だと書かれていますが、なぜ私は今できることを意味しているのか分かりません:let id = s.something in my closured function?

+1

あなたが思うより簡単かもしれません。 'map()'でコードをカットして貼り付け、関数名を 'map(listSlides)'に入れてみてください。問題が発生した場合は、試したコードを投稿してください。 – bloodyKnuckles

+0

'listSlides'は本当にあなたのクラスのメソッドになるべきではありません。特別なことはしません。それは関数宣言(メソッド内またはクラス外)でなければなりません。静的メソッドかもしれませんが、もしあれば 's'の方が良いでしょう。 – Bergi

答えて

1

関数にパラメータを追加し、このようにそれを渡します

this.props.slides.map(s=>listSlides(s)) 

であっても、より簡潔な(@Bergiのおかげで)

this.props.slides.map(listSlides); 

と機能は次のようになります。

function listSlides(s){ 
    let id = s.get('id') 
    // and so on 
} 
+0

それは私が考えなければならないことに沿ったものでしたが、私はまだそれを理解していません。そのメソッドは、javascriptプロトタイプの一部であり、それが私の変数に追加できるのはなぜですか? –

+0

はい、それ以外の方法です。 sが表すオブジェクトが実装している(そのプロトタイプの一部として取得している)場合は、get on 's'関数を呼び出すことができます。つまり、props.slidesによって返される配列内のオブジェクトは、getに応答できる必要があります。マップの仕組みに付随しています。 Mapは、配列の各要素を関数に渡し、各要素に対して関数が返すものであれば、新しい配列を生成します。 – danh

+0

実際には 'this.props.slides.map(listSlides)'でなければなりません - 矢印機能は必要ありません – Bergi

関連する問題