2016-04-22 19 views
2

GoogleのプレイストアURLにダウンロードボタンを解決するためのクリックハンドラーを作成しました。React Nativeで直ちにクリックされたハンドラーをクリックします

ページが読み込まれるとすぐにURLにアクセスするのが問題です。

クリックハンドラはonPress属性の中にネストされています。私は何も押さないので、なぜこのようなことが起こるのか理解していません。

助けていただけたら幸いです!

OpenURL.js:

'use strict'; 
import React, { 
    Component, 
    PropTypes, 
    Linking, 
    StyleSheet, 
    Text, 
    TouchableNativeFeedback, 
    TouchableHighlight, 
    View 
} from 'react-native'; 

class OpenURLButton extends Component { 

    constructor(props) { 
    super(props); 
    } 

    handleClick(url) { 
    console.log(url); 
    console.log('handling click! this is : '); 
    console.dir(this); 
    Linking.canOpenURL(this.props.url).then(supported => { 
     if (supported) { 
     Linking.openURL(this.props.url); 
     } else { 
     console.log('Don\'t know how to open URI: ' + this.props.url); 
     } 
    }); 
    } 

    render() { 
    console.log('logging "this" inside render inside OpenURL.js:'); 
    console.dir(this); 
    return (
     <TouchableHighlight onPress={this.handleClick(this.props.appStoreUrl)}> 
     <Text>Download {this.props.appStoreUrl}</Text> 
     </TouchableHighlight> 
    ); 
    } 

} 


OpenURLButton.propTypes = { 
    url: React.PropTypes.string, 
} 

export default OpenURLButton; 

Inventory.js:

<ScrollView> 
     <View style={styles.ImageContainer}> 
     <Image style={styles.ImageBanner} source={{uri: selectedInventory.bannerImage}} /> 
     </View> 
     <View style={styles.ListGridItemCaption}> 
     <Image style={[styles.ImageThumb, styles.ImageGridThumb]} source={{uri: selectedInventory.thumbImage}} /> 
     <Text style={styles.Text} key="header">{name}</Text> 
     </View> 
     <View> 
     <Text>{selectedInventory.description}</Text> 
     <OpenURLButton url={selectedInventory.appStoreUrl}/> 
     </View> 
    </ScrollView> 

答えて

3

変更:

<TouchableHighlight onPress={this.handleClick(this.props.appStoreUrl)}> 
    <Text>Download {this.props.appStoreUrl}</Text> 
</TouchableHighlight> 

へ:

<TouchableHighlight onPress={() => {this.handleClick(this.props.appStoreUrl)}}> 
    <Text>Download {this.props.appStoreUrl}</Text> 
</TouchableHighlight> 

"your"メソッドを呼び出す匿名関数を作成しています。このになります。

+0

行き先ありがとう!! –

+0

これは申し訳ありませんが、ページロード時にメソッドが実行されないようにするために、匿名関数を使用する必要がある理由についてのドキュメントを検索しようとしましたが、失敗しました。 「ローカル」(同じクラスに居る)メソッドと「リモート」(つまり:this.props.doStuff)メソッドで渡されたときの 'onPress' /すべてのイベントハンドラの動作の違いは、 ) 方法。 ローカルメソッドを使用すると、上記の問題が発生しました。なぜ、「なぜなら」という理由を理解しています。どうもありがとう。 –

関連する問題