2015-05-29 3 views
32

Как отобразить гиперссылку в приложении React Native?Показать гиперссылку в React Native App

например.

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

Рассмотрите возможность добавления метки, как «JavaScript», чтобы получить больше внимания со стороны пользователей. Но не слишком обобщайте свои сообщения, добавляя теги, такие как «кодирование» и т. Д. –

ответ

65

Что-то вроде этого:

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

используя Linking модуль, который поставляется вместе с React Native. (Обратите внимание, что для использования Linking требуется React Native 0.20.0 или выше.)

+0

Это сработало для меня ... спасибо! –

+0

Если вам нужно динамическое значение, вы можете использовать что-то вроде 'this.props.url' вместо' 'http: // google.com'' (никаких привязок не требуется) –

+0

@philipp это бросает мне ошибку m 'can' t find variable Linking ' – devanshsadhotra

6

Выбранный ответ относится только к iOS. Для обеих платформ, вы можете использовать следующие компоненты:

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

Выбранный ответ работал отлично для меня в Android (RN 35). – Pedram

+0

Как это отличается от принятого ответа? –

+0

@JacobLauritzen Хорошо, теперь это то же самое после того, как кто-то скопировал мой ответ:/http://stackoverflow.com/posts/30540502/revisions – Kuf

0

Если вы хотите сделать ссылки и другие типы форматированного текста, более комплексное решение заключается в использовании React Native HTMLView.

+1

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и укажите ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/13192218) – Ari0nhh

+0

@ Ari0nhh Я восстановил вопрос, поскольку это был единственный способ ответить на ваш комментарий. На SO есть много прецедентов, где высокий рейтинг - это просто ссылка на хорошую библиотеку. Плюс другие ответы уже охватывают простую реализацию. Полагаю, я мог бы переписать это как комментарий по первому вопросу, но я рассматриваю его как реальный ответ. И оставить ссылку здесь, по крайней мере, крошкой для будущих ищущих, если люди хотят ее отредактировать и улучшить ее с лучшими примерами, по крайней мере, сейчас есть место для начала. – Eliot

0

для React Native, есть библиотека для открытия гиперссылок в приложении.

В дополнение к этому, я полагаю, вам нужно будет проверить URL-адрес, и лучшим подходом является Regex. https://www.npmjs.com/package/url-regex

+0

Если вы создаете для ios, SVC лучше подходит для реализации, а не для связывания (для открытия в Safari Browser). https://github.com/naoufal/react-native-safari-view – rajaishwary

1

Чтобы сделать это, я бы сильно подумал об упаковке компонента Text в TouchableOpacity. Когда прикасается TouchableOpacity, он исчезает (становится менее непрозрачным). Это дает пользователю немедленную обратную связь при касании текста и обеспечивает улучшенный пользовательский интерфейс.

Вы можете использовать onPress свойство на TouchableOpacity сделать ссылку случиться:

<TouchableOpacity onPress={() => Linking.openURL('http://google.com')}> 
    <Text style={{color: 'blue'}}> 
    Google 
    </Text> 
</TouchableOpacity> 
Смежные вопросы