Auto-Linking component for React Native. Parses text and wraps URLs, phone numbers, emails, social handles, hashtags, and more with Text nodes and onPress handlers. And it's all fully customizable :)
npm install react-native-autolink --save
Simply import the library and pass desired props:
import Autolink from 'react-native-autolink';
class MyComponent extends Component {
render() {
return (
<Autolink
text="This is the string to parse for urls (https://github.com/joshswan/react-native-autolink), phone numbers (415-555-5555), emails (josh@example.com), mentions/handles (@twitter), and hashtags (#exciting)"
hashtag="instagram"
mention="twitter"
/>
);
}
}
component?
email?
hashtag?
latlng?
linkProps?
linkStyle?
mention?
onPress?
onLongPress?
phone?
renderLink?
renderText?
showAlert?
stripPrefix?
stripTrailingSlash?
text
textProps?
truncate?
truncateChars?
truncateLocation?
url?
webFallback?
Note: All other props (e.g. numberOfLines
, style
, etc.) will be passed through to the container component, which is either Text
(default) or a custom component supplied to the component
prop.
Type | Required | Default | Description |
---|---|---|---|
React.ComponentType | No | Text |
Override the component used as the output container. |
<Autolink text={text} component={View} />
Type | Required | Default | Description |
---|---|---|---|
boolean | No | true |
Whether to link emails (mailto:{email} ). |
<Autolink text={text} email={false} />
Type | Required | Default | Description |
---|---|---|---|
boolean or string | No | false |
Whether to link hashtags to supplied service. Possible values: false (disabled), "facebook" , "instagram" , "twitter" . |
<Autolink text={text} hashtag="facebook" />
Type | Required | Default | Description |
---|---|---|---|
boolean | No | false |
Whether to link latitude, longitude pairs. |
Warning: Still experimental.
<Autolink text={text} latlng />
Type | Required | Default | Description |
---|---|---|---|
TextProps | No | {} |
Attributes applied to link Text components. |
<Autolink text={text} linkProps={{ suppressHighlighting: true, testID: 'link' }} />
Type | Required | Default | Description |
---|---|---|---|
TextStyle | No | {} |
Styles applied to link Text components. Note: Will be overriden if style supplied in linkProps . |
<Autolink text={text} linkStyle={{ color: 'blue' }} />
Type | Required | Default | Description |
---|---|---|---|
boolean or string | No | false |
Whether to link mentions/handles to supplied service. Possible values: false (disabled), "instagram" , "soundcloud" , "twitter" . |
<Autolink text={text} mention="instagram" />
Type | Required | Default | Description |
---|---|---|---|
function | No | Override default link press behavior. Signature: (url: string, match: Match) => void . |
<Autolink
text={text}
onPress={(url, match) => {
switch (match.getType()) {
case 'mention':
Alert.alert('Mention pressed!');
default:
Alert.alert('Link pressed!');
}
}}
/>
Type | Required | Default | Description |
---|---|---|---|
function | No | none | Handle link long press events. Signature: (url: string, match: Match) => void . |
<Autolink
text={text}
onLongPress={(url, match) => {
switch (match.getType()) {
case 'mention':
Alert.alert('Mention long pressed!');
default:
Alert.alert('Link long pressed!');
}
}}
/>
Type | Required | Default | Description |
---|---|---|---|
boolean or string | No | true |
Whether to link phone numbers. Possible values: false (disabled), true (tel:{number} ), "sms" or "text" (sms:{number} ). |
Note: Currently, only US numbers are supported.
<Autolink text={text} phone="sms" />
Type | Required | Default | Description |
---|---|---|---|
function | No | Override default link rendering behavior. Signature: (text: string, match: Match, index: number) => React.ReactNode . |
Note: You'll need to handle press logic yourself when using renderLink
.
<Autolink
text={text}
component={View}
renderLink={(text, match) => <MyLinkPreviewComponent url={match.getAnchorHref()} />}
/>
Type | Required | Default | Description |
---|---|---|---|
function | No | Override default text rendering behavior. Signature: (text: string, index: number) => React.ReactNode . |
<Autolink
text={text}
component={View}
renderText={(text) => <MyTypographyComponent>{text}</MyTypographyComponent>}
/>
Type | Required | Default | Description |
---|---|---|---|
boolean | No | false |
Whether to display an alert before leaving the app (for privacy or accidental clicks). |
<Autolink text={text} showAlert />
Type | Required | Default | Description |
---|---|---|---|
boolean | No | true |
Whether to strip protocol from URL link text (e.g. https://github.com -> github.com ). |
<Autolink text={text} stripPrefix={false} />
Type | Required | Default | Description |
---|---|---|---|
boolean | No | true |
Whether to strip trailing slashes from URL link text (e.g. github.com/ -> github.com ). |
<Autolink text={text} stripTrailingSlash={false} />
Type | Required | Default | Description |
---|---|---|---|
string | Yes | The string to parse for links. |
<Autolink text={text} />
Type | Required | Default | Description |
---|---|---|---|
TextProps | No | {} |
Attributes applied to non-link Text components. |
<Autolink text={text} textProps={{ selectable: false }} />
Type | Required | Default | Description |
---|---|---|---|
number | No | 32 |
Maximum length of URL link text. Possible values: 0 (disabled), 1+ (maximum length). |
<Autolink text={text} truncate={20} />
Type | Required | Default | Description |
---|---|---|---|
string | No | .. |
Characters to replace truncated URL link text segments with (e.g. github.com/../repo ) |
<Autolink text={text} truncateChars="**" />
Type | Required | Default | Description |
---|---|---|---|
string | No | "smart" |
Override truncation location. Possible values: "smart" , "end" , "middle" . |
<Autolink text={text} truncateLocation="end" />
Type | Required | Default | Description |
---|---|---|---|
boolean or object | No | true |
Whether to link URLs. Possible values: false (disabled), true , UrlConfig (see below). |
type UrlConfig = {
// Whether to link URLs prefixed with a scheme (e.g. https://github.com)
schemeMatches?: boolean;
// Whether to link URLs prefix with www (e.g. www.github.com)
wwwMatches?: boolean;
// Whether to link URLs with TLDs but not scheme or www prefixs (e.g. github.com)
tldMatches?: boolean;
};
<Autolink text={text} url={false} />
<Autolink text={text} url={{ tldMatches: false }} />
Type | Required | Default | Description |
---|---|---|---|
boolean | No | Android: true , iOS: false |
Whether to link to web versions of services (e.g. Facebook, Instagram, Twitter) for hashtag and mention links when users don't have the respective app installed. |
Note: Requires LSApplicationQueriesSchemes
on iOS so it is disabled by default on iOS. See Linking docs for more info.
Copyright (c) 2016-2020 Josh Swan
Licensed under the The MIT License (MIT) (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://raw.githubusercontent.com/joshswan/react-native-autolink/master/LICENSE
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.