2015-05-29 6 views
32

Wie kann ich einen Hyperlink in einer React Native App anzeigen?Hyperlink in React Native App anzeigen

z.B.

<a href="https://google.com>Google</a> 
+1

Betrachten weitere Tags wie ‚javascript‘ Hinzufügen von mehr Aufmerksamkeit von den Benutzern zu erhalten. Verallgemeinern Sie Ihre Beiträge nicht, indem Sie Tags wie "Codierung" usw. hinzufügen. –

Antwort

65

Etwas wie folgt aus:

<Text style={{color: 'blue'}} 
     onPress={() => Linking.openURL('http://google.com')}> 
    Google 
</Text> 

mit dem Linking-Modul, das mit der gebürtigen React gebündelt wird. (Beachten Sie, dass die Verwendung von Linking React Native 0.20.0 oder höher erfordert.)

+0

Das hat bei mir funktioniert ... Danke! –

+0

Wenn Sie einen dynamischen Wert benötigen, können Sie etwas wie 'this.props.url' anstelle von' 'http: // google.com'' verwenden (keine Klammern erforderlich) –

+0

@philipp es wirft mich Fehler m 'kann' t find variable Linking ' – devanshsadhotra

6

Die ausgewählte Antwort bezieht sich nur auf iOS. Für beide Plattformen können Sie die folgende Komponente verwenden:

import React, { Component, PropTypes } from 'react'; 
import { 
    Linking, 
    Text, 
    StyleSheet 
} from 'react-native'; 

export default class HyperLink extends Component { 

    constructor(){ 
     super(); 
     this._goToURL = this._goToURL.bind(this); 
    } 

    static propTypes = { 
    url: PropTypes.string.isRequired, 
    title: PropTypes.string.isRequired, 
    } 

    render() { 

    const { title} = this.props; 

    return(
     <Text style={styles.title} onPress={this._goToURL}> 
     > {title} 
     </Text> 
    ); 
    } 

    _goToURL() { 
    const { url } = this.props; 
    Linking.canOpenURL(url).then(supported => { 
     if (supported) { 
     Linking.openURL(this.props.url); 
     } else { 
     console.log('Don\'t know how to open URI: ' + this.props.url); 
     } 
    }); 
    } 
} 

const styles = StyleSheet.create({ 
    title: { 
    color: '#acacac', 
    fontWeight: 'bold' 
    } 
}); 
+1

Die ausgewählte Antwort funktionierte für mich in Android (RN 35). – Pedram

+0

Wie unterscheidet sich das von der angenommenen Antwort? –

+0

@JacobLauritzen Nun, es ist das gleiche, nachdem jemand meine Antwort kopiert:/http://Stackoverflow.com/posts/30540502/ Revisionen – Kuf

0

Wenn Sie Links und andere Arten von Rich-Text tun wollen, eine umfassendere Lösung ist React Native HTMLView zu verwenden.

+1

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier und Stellen Sie den Link als Referenz zur Verfügung. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/13192218) – Ari0nhh

+0

@ Ari0nhh Ich löschte die Frage, da es die einzige Möglichkeit war, auf Ihren Kommentar zu antworten. Es gibt viele Präzedenzfälle auf SO, wo eine hochrangige Antwort einfach eine Verbindung zu einer guten Bibliothek ist. Plus andere Antworten decken bereits eine einfache Implementierung ab. Ich nehme an, ich könnte dies als Kommentar zu der ursprünglichen Frage wiederholen, aber ich sehe es als eine echte Antwort an. Und den Link hier zu lassen, ist zumindest ein Krümel für zukünftige Suchende, wenn die Leute ihn jetzt bearbeiten und mit besseren Beispielen verbessern wollen, dann gibt es jetzt einen Platz zum Starten. – Eliot

0

für die React Native, gibt es eine Bibliothek zum Öffnen von Hyperlinks in der App. https://www.npmjs.com/package/react-native-hyperlink

Zusätzlich dazu, nehme ich an, dass Sie URL überprüfen müssen, und der beste Ansatz ist Regex. https://www.npmjs.com/package/url-regex

+0

Wenn Sie für IOS erstellen, ist der SVC besser zu implementieren als zu verknüpfen (zum Öffnen im Safari-Browser). https://github.com/naoufal/react-native-safari-view – rajaishwary

1

Um dies zu tun, würde ich stark erwägen, eine Komponente in einem TouchableOpacity zu verpacken. Wenn eine TouchableOpacity berührt wird, blendet sie (wird weniger undurchsichtig). Dies gibt dem Benutzer unmittelbares Feedback beim Berühren des Textes und sorgt für eine verbesserte Benutzererfahrung.

können Sie die onPress Eigenschaft auf dem TouchableOpacity benutzen Sie den Link passieren:

<TouchableOpacity onPress={() => Linking.openURL('http://google.com')}> 
    <Text style={{color: 'blue'}}> 
    Google 
    </Text> 
</TouchableOpacity>