2016-07-12 13 views
0

TouchableHighlightのonPressを使用して、コンポーネントから両方のプロップを取得し、グローバルなこのコンテキストを取得します。React Native 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> 
 
    ); 
 
    
 
    } 
 
}

、これはグローバル(コンポーネント)の状態とあなたの子供TouchableHighlightコンポーネントの小道具の両方にごalertProp機能へのアクセスを提供します。

+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

クール、あなたがうまく働いてうれしい!とにかく、まったく新しい関数を作成するのではなく、インデックスをバインドする方が効率的だと思います。 :) –

関連する問題