2016-10-27 16 views
0

私の反応のアプリケーションでは、私は文字列項目のセットを含む状態を持っています。私はそれがbookundefinedあると文句を言いselectedBook関数内でそれその後(book)=>{this.props.selectedBook(book)} に機能を変更したときにtypescript arrow関数にパラメータを渡す

renderList(){  
     return this.props.books.map((book)=>{ 

      return(
      <li key={book.title} onClick={()=>{this.props.selectedBook(book)}}> 
        {book.title} 
      </li>); 
      }); 
} 

しかし: は、私は正常に以下のコードを使用してHTMLにこのアイテムをレンダリングすることができます。

だから私はそれらの両方が、私はすでにある本を得た最初のバージョンでは同じですが、私にとっては

()=>{this.props.selectedBook(book)} //book is shown with no problem 

(book)=>{this.props.selectedBook(book)} //book is undefined

の違いは何であるかさまよっています私のコンポーネントで利用可能ですが、2番目のものではパラメータとして渡します。だからなぜ私は2番目のもので未定義の本を手に入れますか?

更新:それは本を受信すると、それはそれのために行動しますので

selectedBookは、アクションの作成者です。

export default function(book){ 
    console.log(book); 
    return({ 
    type:'Selected_Book', 
    payload:book 
    }); 
} 
+0

あなたは 'onClick'メソッドの関数について話していますか?また、これはタイスクリプトと何が関係していますか? –

答えて

0

あなたは範囲の変化に陥り始めています。

関数定義内のbookオブジェクトを(book) =>と定義すると、その参照がスコープ内に配置されます。それがなければ、book参照は実際にthis.props.books.map((book)=>から来ています。したがって、この関数は有効なbook参照を受け取ります。

奇妙なことに、イベントはselectedBookメソッドに渡されていないということですが、ソースが表示されなくてもコメントできませんでした(これが重要な場合は質問を更新してください)。

+0

私は自分の質問を編集しました。 – Salman

+0

私は、定義クラスや小道具などの情報が必要だと思います。なぜonClickハンドラでbook変数を再定義する必要がありますか? –

+0

それは単なる運動です。私は反応を学ぶために赤ちゃんの措置を取る。 – Salman

関連する問題