2016-07-12 3 views
0

TouchableHighlight에서 onPress를 사용하여 구성 요소에서 두 개의 소품을 얻고이 컨텍스트를 전역으로 가져 오려고합니다.React 네이티브 TouchableHighlight : 구성 요소 및 컨텍스트 가져 오기

나는 사용하여 개별적으로 모두를 얻을 수 있습니다 :

onPress={this.alertProp} // get props from TouchableHighlight using this.myProp 

또는

onPress={() => this.alertProp()} // get global this to use e.g. this.state 

어떤 간단한 방법 모두를 얻을 수?

답변

1

하위 구성 요소에서 소품을 가져와야하는 경우 ref을 사용할 수 있습니다. 예컨대 :

class Example extends React.Component { 
 

 
    alertProp(index) { 
 
    //now "this" has your global component, 
 
    //and this._touchables[index] is the ref 
 
    //of your TouchableHighlight 
 
    } 
 

 
    render() { 
 
    const data = [1, 2, 3, 4]; 
 
    return (
 
    <View> 
 
     {data.map((item, index) => { 
 
     return (
 
     <TouchableHighlight 
 
      onPress={() => this.alertProp.bind(this)(index)} 
 
      ref={(t) => this._touchables[index] = t} 
 
     />; 
 
     ); 
 
     }} 
 
    </View> 
 
    ); 
 
    
 
    } 
 
}

나는 귀하의 질문에 올바르게, 이것이 당신의 alertProp 기능 모두 글로벌 (구성 요소) 상태에 접근하고 자녀 TouchableHighlight 구성 요소의 소품을 제공 이해합니다.

+0

답장을 보내 주셔서 감사합니다. 루프에서 TouchableHighlight을 많이 생성했기 때문에 정적 참조를 사용할 수 없습니다. –

+1

'ref' prop는 바로 그 이유 때문에 콜백을받습니다. 콜백을 사용하여 자식 컴포넌트를 부모 객체에 할당하고,'onPress' 함수에서 누른 TouchableHighlight의 인덱스를 전달하여 액세스 할 수 있습니다. 위의 스 니펫을 최소한의 예제로 업데이트했습니다. –

+0

종이에 완벽하게 보입니다. ref를 함수로 사용하는 것을 몰랐습니다. 테스트 해보고 그것이 작동하면 답을 받아 들일 것입니다 :-) –

0

마지막으로 더 많은 매개 변수를 바인딩하면 작동하도록 할 수 있습니다.

class Example extends React.Component { 



alertProp(param1, param2) { 
    //now "this" has your global component, 
    //param1, param2 don't get rewrited if they are dynamic inside a loop 
    } 

    render() { 
    const data = [1, 2, 3, 4]; 
    var param1; 
    return (
    <View> 
     {data.map((item, index) => { 
     param1 = index; 
     return (
     <TouchableHighlight 
      onPress={this.alertProp.bind(this,param1, param2)} 
     />; 
     ); 
     }} 
    </View> 
    ); 

    } 
} 
+0

멋지고, 다행 이네요! 어쨌든, 완전히 새로운 함수를 만드는 것보다 색인을 '바인딩'하는 것이 더 효율적이라고 가정합니다. :) –

관련 문제