2015-05-29 20 views
32

Jak wyświetlić hiperłącze w aplikacji React Native?Wyświetl hiperłącze w aplikacji React Native App

np.

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

Warto dodać więcej tagów jak „javascript”, aby uzyskać więcej uwagi od użytkowników. Ale nie przesadzaj z generowaniem postów przez dodawanie tagów takich jak "kodowanie" itp. –

Odpowiedz

65

coś takiego:

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

użyciu modułu Linking, który jest dostarczany wraz z React Native. (Należy pamiętać, że użycie Linking wymaga reakcji w języku macierzystym od 0,20.0 lub wyższym).

+0

To działało dla mnie ... dzięki! –

+0

Jeśli potrzebujesz wartości dynamicznej, możesz użyć czegoś takiego jak 'this.props.url' zamiast' 'http: // google.com'' (bez konieczności użycia nawiasów) –

+0

@philipp rzuca mi błąd m' can ' t find variable Linking ' – devanshsadhotra

6

Wybrana odpowiedź dotyczy tylko iOS. Na obu platformach, można użyć następujący komponent:

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

Wybrana odpowiedź sprawdziła się dobrze w Androidzie (RN 35). – Pedram

+0

Jak to się różni od zaakceptowanej odpowiedzi? –

+0

@JacobLauritzen Cóż, teraz jest tak samo po skopiowaniu przez kogoś mojej odpowiedzi:/http://stackoverflow.com/posts/30540502/revisions – Kuf

0

Jeśli chcesz zrobić linki i inne rodzaje tekstu sformatowanego, bardziej kompleksowym rozwiązaniem jest użycie React Native HTMLView.

+1

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podaj link do odniesienia. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ recenzja/niskiej jakości-posty/13192218) – Ari0nhh

+0

@ Ari0nhh Usunąłem pytanie, ponieważ był to jedyny sposób, w jaki mogłem odpowiedzieć na twój komentarz. Istnieje wiele precedensów na SO, gdzie wysoko oceniona odpowiedź jest po prostu linkiem do dobrej biblioteki. Plus inne odpowiedzi już obejmują prostą implementację. Przypuszczam, że mógłbym to skomentować jako komentarz do pierwotnego pytania, ale uważam to za prawdziwą odpowiedź. Pozostawienie tego linku jest co najmniej okrucieństwem dla przyszłych poszukiwaczy, jeśli ludzie chcą go edytować i ulepszyć go z lepszymi przykładami, przynajmniej teraz jest miejsce na rozpoczęcie. – Eliot

0

dla React Native, istnieje biblioteka do otwierania hiperłączy w aplikacji. https://www.npmjs.com/package/react-native-hyperlink

Poza tym, przypuszczam, że będziesz musiał sprawdzić adres URL i najlepszym podejściem jest Regex. https://www.npmjs.com/package/url-regex

+0

Jeśli budujesz dla ios, SVC jest lepszym podejściem do implementacji niż Linking (aby otworzyć w przeglądarce Safari). https://github.com/naoufal/react-native-safari-view – rajaishwary

1

Aby to zrobić, ja zdecydowanie rozważyć owijania komponent Text w TouchableOpacity. Po dotknięciu TouchableOpacity zanika (staje się mniej nieprzezroczysty). Daje to użytkownikowi natychmiastową informację zwrotną podczas dotykania tekstu i zapewnia lepsze wrażenia użytkownika.

Można użyć właściwości onPress na TouchableOpacity aby link zdarzyć:

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