2016-09-27 3 views
0

ListItem에 onClick 이벤트를 설정했습니다. 그런 다음 호출 된 메소드에 .bind을 호출하여 클릭 된 목록 항목의 ID 및 이름 값을 전달합니다.onClick 이벤트 바인딩에서 매개 변수를 전달하는 방법은 무엇입니까?

다음 SO question은 bind를 사용하여 제안했지만 ListItem에 onCLick 이벤트를 추가하면 목록 바인딩이 깨집니다.

클릭 이벤트를 추가하기 전에 asset.name에 대한 목록 범위 바인딩이 예상대로 작동하고 목록이 채워집니다.

또한 매개 변수없이 onClick={this._onAssetSelected()을 시도하면 click 이벤트가 작동하지 않습니다.

질문 : JSX에 onClick 이벤트 바인딩에

어떻게 전달할 수있는 매개 변수?

목록 정의 : 클릭 이벤트에서 호출

   <List selectable={true} selected={0}> 
       { 

        this.state.data.map(function (asset) { 
         return (
          <ListItem justify="between" onClick={this._onAssetSelected.bind(this, asset.name, asset.id)} > 
           <span>{asset.name}</span> 
          </ListItem> 
         ); 
        }) 

       } 
       </List> 

방법 :

_onAssetSelected(assetName, assetID) { 

    console.log(assetName); 
    console.log(assetID);  


    } 

답변

2

당신은이 작업을 수행 할 수 있습니다. anonymous 함수를 콜백으로 정의하십시오.이 함수는 매개 변수를 사용하여 메서드를 호출합니다. Hop ut이 도움이됩니다!

<List 
    selectable={true} 
    selected={0}> 
    { 

    this.state.data.map(function (asset) { 
     return (
      <ListItem 
       justify="between" 
       onClick={(e) => this._onAssetSelected(asset.name, asset.id, e)} > 
       <span>{asset.name}</span> 
      </ListItem> 
     ); 
    }) 

    } 
</List> 
+0

일반적인 폐쇄 방법을 사용하는 것이 좋습니다. 또한 특정 속성보다는 완전한 자산 객체를 전달합니다. – gor181

+0

그래서 위와 같이 익명 함수를 정의했습니다. dev 툴의 콘솔은'Uncaught TypeError : undefined의 _onAssetSelected '속성을 읽을 수 없습니다.이 메소드가 클래스에 정의되어 있음을 알 수 있습니다. 아니면 내가 여기서 다른 것을 놓치고 있습니까? –

+0

렌더에서'return' 전에'var _this = this'를 추가하고 맵 안에서'_this._onAssetSelected'를 사용해야합니다. –