From a6f9fbb8935853402fab24afe7888a9f709a468b Mon Sep 17 00:00:00 2001 From: Website Deployment Script Date: Wed, 6 Jul 2016 12:49:15 +0000 Subject: [PATCH] Updated docs for 0.29 --- css/react-native.css | 143 +++++- docs/accessibility.html | 6 +- docs/actionsheetios.html | 10 +- docs/activityindicator.html | 8 +- docs/alert.html | 8 +- docs/alertios.html | 51 +- docs/android-building-from-source.html | 8 +- docs/android-ui-performance.html | 4 +- docs/animated.html | 48 +- docs/animations.html | 14 +- docs/appregistry.html | 6 +- docs/appstate.html | 10 +- docs/asyncstorage.html | 90 ++-- docs/backandroid.html | 6 +- docs/cameraroll.html | 16 +- docs/clipboard.html | 10 +- docs/colors.html | 4 +- docs/communication-ios.html | 6 +- docs/datepickerandroid.html | 10 +- docs/datepickerios.html | 8 +- docs/debugging.html | 6 +- docs/dimensions.html | 8 +- docs/direct-manipulation.html | 46 +- docs/drawerlayoutandroid.html | 6 +- docs/embedded-app-android.html | 118 ----- docs/embedded-app-ios.html | 104 ----- docs/flexbox.html | 64 ++- docs/geolocation.html | 12 +- docs/gesture-responder-system.html | 4 +- docs/getting-started.html | 249 ++-------- docs/handling-text-input.html | 46 ++ docs/handling-touches.html | 31 ++ docs/height-and-width.html | 52 +++ docs/image.html | 174 +++++-- docs/images.html | 6 +- docs/integration-with-existing-apps.html | 440 ++++++++++++++++++ docs/intentandroid.html | 12 +- docs/interactionmanager.html | 9 +- docs/javascript-environment.html | 4 +- docs/known-issues.html | 21 - docs/layout-props.html | 127 +++++ docs/layoutanimation.html | 10 +- docs/linking-libraries-ios.html | 6 +- docs/linking.html | 16 +- docs/listview.html | 8 +- docs/listviewdatasource.html | 16 +- docs/mapview.html | 114 +++-- docs/modal.html | 59 ++- docs/more-resources.html | 19 + docs/native-components-android.html | 9 +- docs/native-components-ios.html | 6 +- docs/native-modules-android.html | 6 +- docs/native-modules-ios.html | 8 +- docs/nativemethodsmixin.html | 14 +- docs/navigator-comparison.html | 294 +++++++++++- docs/navigator.html | 168 +++++-- docs/navigatorios.html | 288 ++++++------ docs/netinfo.html | 14 +- docs/network.html | 92 ++-- docs/panresponder.html | 10 +- docs/performance.html | 8 +- docs/picker.html | 8 +- docs/pickerios.html | 6 +- docs/pixelratio.html | 10 +- docs/platform-specific-code.html | 23 +- docs/progressbarandroid.html | 8 +- docs/progressviewios.html | 6 +- docs/props.html | 61 +++ docs/pushnotificationios.html | 34 +- docs/refreshcontrol.html | 8 +- docs/running-on-device-android.html | 14 +- docs/running-on-device-ios.html | 4 +- docs/running-on-simulator-ios.html | 19 + docs/sample-application-movies.html | 317 ------------- docs/scrollview.html | 10 +- docs/segmentedcontrolios.html | 8 +- docs/shadow-props.html | 19 + docs/shadowproptypesios.html | 19 - docs/signed-apk-android.html | 8 +- docs/slider.html | 8 +- docs/sliderios.html | 8 +- docs/state.html | 54 +++ docs/statusbar.html | 9 +- docs/statusbarios.html | 106 +---- docs/style.html | 57 +-- docs/stylesheet.html | 19 +- docs/switch.html | 8 +- docs/tabbarios-item.html | 6 +- docs/tabbarios.html | 8 +- docs/testing.html | 6 +- docs/text.html | 144 ++++-- docs/textinput.html | 128 +++-- docs/timepickerandroid.html | 10 +- docs/timers.html | 6 +- docs/toastandroid.html | 8 +- docs/toolbarandroid.html | 8 +- docs/touchablehighlight.html | 6 +- docs/touchablenativefeedback.html | 12 +- docs/touchableopacity.html | 6 +- docs/touchablewithoutfeedback.html | 6 +- docs/transforms.html | 4 +- docs/troubleshooting.html | 19 +- docs/tutorial-core-components.html | 86 ---- docs/tutorial.html | 32 ++ docs/upgrading.html | 6 +- docs/using-a-listview.html | 46 ++ docs/using-a-scrollview.html | 65 +++ docs/vibration.html | 8 +- docs/vibrationios.html | 8 +- docs/videos.html | 67 --- docs/view.html | 180 ++++--- docs/viewpagerandroid.html | 12 +- docs/webview.html | 53 ++- img/AndroidDevServerDialog.png | Bin 0 -> 142925 bytes img/AndroidDevSettings.png | Bin 0 -> 197019 bytes img/AndroidDeveloperMenu.png | Bin 0 -> 82306 bytes img/DeveloperMenu.png | Bin 0 -> 49640 bytes img/NavigationStack-Navigator.gif | Bin 0 -> 154381 bytes img/NavigationStack-NavigatorIOS.gif | Bin 0 -> 64885 bytes ...native-integration-example-high-scores.png | Bin 0 -> 7420 bytes ...native-integration-example-home-screen.png | Bin 0 -> 6610 bytes ...tive-add-react-native-integration-link.png | Bin 0 -> 22551 bytes ...e-add-react-native-integration-wire-up.png | Bin 0 -> 118362 bytes ...ve-existing-app-integration-ios-before.png | Bin 0 -> 5409 bytes index.html | 301 ++---------- js/scripts.js | 21 +- movies.json | 11 + releases/0.29/versions.html | 2 +- showcase.html | 4 +- support.html | 4 +- versions.html | 4 +- 131 files changed, 3070 insertions(+), 2238 deletions(-) delete mode 100644 docs/embedded-app-android.html delete mode 100644 docs/embedded-app-ios.html create mode 100644 docs/handling-text-input.html create mode 100644 docs/handling-touches.html create mode 100644 docs/height-and-width.html create mode 100644 docs/integration-with-existing-apps.html delete mode 100644 docs/known-issues.html create mode 100644 docs/layout-props.html create mode 100644 docs/more-resources.html create mode 100644 docs/props.html create mode 100644 docs/running-on-simulator-ios.html delete mode 100644 docs/sample-application-movies.html create mode 100644 docs/shadow-props.html delete mode 100644 docs/shadowproptypesios.html create mode 100644 docs/state.html delete mode 100644 docs/tutorial-core-components.html create mode 100644 docs/tutorial.html create mode 100644 docs/using-a-listview.html create mode 100644 docs/using-a-scrollview.html delete mode 100644 docs/videos.html create mode 100644 img/AndroidDevServerDialog.png create mode 100644 img/AndroidDevSettings.png create mode 100644 img/AndroidDeveloperMenu.png create mode 100644 img/DeveloperMenu.png create mode 100644 img/NavigationStack-Navigator.gif create mode 100644 img/NavigationStack-NavigatorIOS.gif create mode 100644 img/react-native-add-react-native-integration-example-high-scores.png create mode 100644 img/react-native-add-react-native-integration-example-home-screen.png create mode 100644 img/react-native-add-react-native-integration-link.png create mode 100644 img/react-native-add-react-native-integration-wire-up.png create mode 100644 img/react-native-existing-app-integration-ios-before.png create mode 100644 movies.json diff --git a/css/react-native.css b/css/react-native.css index 7d506e34ec2..d015967f594 100644 --- a/css/react-native.css +++ b/css/react-native.css @@ -125,6 +125,33 @@ html * { rendering-intent: auto; } +.example-container { + position: relative; +} + +.embedded-simulator, .embedded-simulator * { + box-sizing: border-box; +} + +.embedded-simulator p { + text-align: center; + color: #999; +} + +.embedded-simulator { + width: 210px; + position: absolute; + right: -200px; + top: 0; +} + +@media screen and (max-width: 680px) { + .embedded-simulator { + position: relative; + right: 0; + } +} + .prism { white-space: pre-wrap; font-family: 'source-code-pro', Menlo, 'Courier New', Consolas, monospace; @@ -377,7 +404,7 @@ h1:hover .hash-link, h2:hover .hash-link, h3:hover .hash-link, h4:hover .hash-li } .hero { - background: #05A5D1; + background: #2D2D2D; padding: 50px 0; color: #FDF3E7; font-weight: 300; @@ -1027,21 +1054,6 @@ small code, li code, p code { text-decoration: none !important; } -.column-left, .column-left * { - box-sizing: border-box; -} - -.column-left p { - text-align: center; - color: #999; -} - -.column-left { - float: left; - padding: 20px; - width: 210px; -} - /* Modal */ .modal-backdrop { background: rgba(0,0,0,.4); @@ -1225,6 +1237,23 @@ div[data-twttr-id] iframe { margin-left: 20px; } +.methodTitle { + font-weight: bold; + font-size: 24px; + color: #2F9C0A; +} + +.compactProps .methodTitle { + font-size: 14px; + margin-bottom: 0; + margin-top: 0; +} + +.compactProps .methodTitle div { + font-weight: normal; + margin-left: 20px; +} + .prop { padding: 5px 10px; } @@ -1243,6 +1272,16 @@ div[data-twttr-id] iframe { font-size: 13px; } +.methodType { + font-weight: normal; + font-size: 24px; +} + +.compactProps .methodType { + font-weight: normal; + font-size: 13px; +} + .platform { background-color: hsl(198, 100%, 87%); border-radius: 5px; @@ -1326,15 +1365,10 @@ div[data-twttr-id] iframe { @media only screen and (min-device-width: 1024px) { .showcase { - width: 20%; + width: 25%; } } -.showcase:hover { - text-decoration: none; - opacity: 0.8; -} - .showcase h3 { margin-bottom: 0px; line-height: 20px; @@ -1545,3 +1579,68 @@ input#algolia-doc-search:focus { background-color: hsl(198, 100%, 96%); color: #3B3738; } + +.params, .props +{ + border-spacing: 0; + border: 0; + border-collapse: collapse; +} + +.params .name, .props .name, .name code { + color: #4D4E53; +} + +.params td, .params th, .props td, .props th +{ + border: 1px solid #ddd; + margin: 0px; + text-align: left; + vertical-align: top; + padding: 4px 6px; + display: table-cell; +} + +.params thead tr, .props thead tr +{ + background-color: hsl(198, 75%, 88%); + font-weight: bold; +} + +.params .params thead tr, .props .props thead tr +{ + background-color: #fff; + font-weight: bold; +} + +.params th, .props th { border-right: 1px solid #aaa; } +.params thead .last, .props thead .last { border-right: 1px solid #ddd; } + +.params td.description > div > p:first-child, +.props td.description > div > p:first-child +{ + margin-top: 0; + padding-top: 0; +} + +.params td.description > p:last-child, +.props td.description > p:last-child +{ + margin-bottom: 0; + padding-bottom: 0; +} + + +/** Web player **/ + +.web-player > iframe, .web-player > .prism { + display: none; +} + +.web-player.desktop > iframe { + display: block; +} + +.web-player.mobile > .prism { + display: block; +} diff --git a/docs/accessibility.html b/docs/accessibility.html index f460e555f29..e17bb5c5ce8 100644 --- a/docs/accessibility.html +++ b/docs/accessibility.html @@ -1,4 +1,4 @@ -Accessibility – React Native | A framework for building native apps using React

Accessibility #

Edit on GitHub

Native App Accessibility (iOS and Android) #

Both iOS and Android provide APIs for making apps accessible to people with disabilities. In addition, both platforms provide bundled assistive technologies, like the screen readers VoiceOver (iOS) and TalkBack (Android) for the visually impaired. Similarly, in React Native we have included APIs designed to provide developers with support for making apps more accessible. Take note, iOS and Android differ slightly in their approaches, and thus the React Native implementations may vary by platform.

Making Apps Accessible #

Accessibility properties #

accessible (iOS, Android) #

When true, indicates that the view is an accessibility element. When a view is an accessibility element, it groups its children into a single selectable component. By default, all touchable elements are accessible.

On Android, ‘accessible={true}’ property for a react-native View will be translated into native ‘focusable={true}’.

<View accessible={true}> +Accessibility – React Native | A framework for building native apps using React

Accessibility #

Edit on GitHub

Native App Accessibility (iOS and Android) #

Both iOS and Android provide APIs for making apps accessible to people with disabilities. In addition, both platforms provide bundled assistive technologies, like the screen readers VoiceOver (iOS) and TalkBack (Android) for the visually impaired. Similarly, in React Native we have included APIs designed to provide developers with support for making apps more accessible. Take note, iOS and Android differ slightly in their approaches, and thus the React Native implementations may vary by platform.

Making Apps Accessible #

Accessibility properties #

accessible (iOS, Android) #

When true, indicates that the view is an accessibility element. When a view is an accessibility element, it groups its children into a single selectable component. By default, all touchable elements are accessible.

On Android, ‘accessible={true}’ property for a react-native View will be translated into native ‘focusable={true}’.

<View accessible={true}> <Text>text one</Text> <Text>text two</Text> </View>

In the above example, we can't get accessibility focus separately on 'text one' and 'text two'. Instead we get focus on a parent view with 'accessible' property.

accessibilityLabel (iOS, Android) #

When a view is marked as accessible, it is a good practice to set an accessibilityLabel on the view, so that people who use VoiceOver know what element they have selected. VoiceOver will read this string when a user selects the associated element.

To use, set the accessibilityLabel property to a custom string on your View:

<TouchableOpacity accessible={true} accessibilityLabel={'Tap me!'} onPress={this._onPress}> @@ -38,7 +38,7 @@ <CustomRadioButton accessibleComponentType={this.state.radioButton} - onPress={this._onPress}/>

In the above example we've created a custom radio button that now behaves like a native one. More specifically, TalkBack now correctly announces changes to the radio button selection.

Testing VoiceOver Support (iOS) #

To enable VoiceOver, go to the Settings app on your iOS device. Tap General, then Accessibility. There you will find many tools that people use to use to make their devices more usable, such as bolder text, increased contrast, and VoiceOver.

To enable VoiceOver, tap on VoiceOver under "Vision" and toggle the switch that appears at the top.

At the very bottom of the Accessibility settings, there is an "Accessibility Shortcut". You can use this to toggle VoiceOver by triple clicking the Home button.

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/actionsheetios.html b/docs/actionsheetios.html index ebd910ffa78..9b3420a91cf 100644 --- a/docs/actionsheetios.html +++ b/docs/actionsheetios.html @@ -1,9 +1,9 @@ -ActionSheetIOS – React Native | A framework for building native apps using React

ActionSheetIOS #

Edit on GitHub

Methods #

static showActionSheetWithOptions(options, callback) #

Display an iOS action sheet. The options object must contain one or more -of:

  • options (array of strings) - a list of button titles (required)
  • cancelButtonIndex (int) - index of cancel button in options
  • destructiveButtonIndex (int) - index of destructive button in options
  • title (string) - a title to show above the action sheet
  • message (string) - a message to show below the title

static showShareActionSheetWithOptions(options, failureCallback, successCallback) #

Display the iOS share sheet. The options object should contain +ActionSheetIOS – React Native | A framework for building native apps using React

ActionSheetIOS #

Edit on GitHub

Methods #

static showActionSheetWithOptions(options, callback) #

Display an iOS action sheet. The options object must contain one or more +of:

  • options (array of strings) - a list of button titles (required)
  • cancelButtonIndex (int) - index of cancel button in options
  • destructiveButtonIndex (int) - index of destructive button in options
  • title (string) - a title to show above the action sheet
  • message (string) - a message to show below the title

static showShareActionSheetWithOptions(options, failureCallback, successCallback) #

Display the iOS share sheet. The options object should contain one or both of message and url and can additionally have a subject or excludedActivityTypes:

  • url (string) - a URL to share
  • message (string) - a message to share
  • subject (string) - a subject for the message
  • excludedActivityTypes (array) - the activites to exclude from the ActionSheet

NOTE: if url points to a local file, or is a base64-encoded uri, the file it points to will be loaded and shared directly. -In this way, you can share images, videos, PDF files, etc.

Examples #

Edit on GitHub
'use strict'; +In this way, you can share images, videos, PDF files, etc.

Examples #

Edit on GitHub
'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -212,7 +212,7 @@ exports.examples return <ShareScreenshotExample />; } } -];
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/activityindicator.html b/docs/activityindicator.html index 438c7be7eda..58b825a3e21 100644 --- a/docs/activityindicator.html +++ b/docs/activityindicator.html @@ -1,5 +1,5 @@ -ActivityIndicator – React Native | A framework for building native apps using React

ActivityIndicator #

Edit on GitHub

Displays a circular loading indicator.

Props #

animating bool #

Whether to show the indicator (true, the default) or hide it (false).

color color #

The foreground color of the spinner (default is gray).

size enum('small', 'large') #

Size of the indicator. Small has a height of 20, large has a height of 36. -Other sizes can be obtained using a scale transform.

ioshidesWhenStopped bool #

Whether the indicator should hide when not animating (true by default).

Examples #

Edit on GitHub
'use strict'; +ActivityIndicator – React Native | A framework for building native apps using React

ActivityIndicator #

Edit on GitHub

Displays a circular loading indicator.

Props #

animating bool #

Whether to show the indicator (true, the default) or hide it (false).

color color #

The foreground color of the spinner (default is gray).

size enum('small', 'large') #

Size of the indicator. Small has a height of 20, large has a height of 36. +Other sizes can be obtained using a scale transform.

ioshidesWhenStopped bool #

Whether the indicator should hide when not animating (true by default).

Examples #

Edit on GitHub
'use strict'; const React = require('react'); const ReactNative = require('react-native'); @@ -156,7 +156,7 @@ const styles = StyleSheet: 'space-around', padding: 8, }, -});
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/alert.html b/docs/alert.html index f4e0c2f6ee9..3cec4d23a5d 100644 --- a/docs/alert.html +++ b/docs/alert.html @@ -1,4 +1,4 @@ -Alert – React Native | A framework for building native apps using React

Alert #

Edit on GitHub

Launches an alert dialog with the specified title and message.

Optionally provide a list of buttons. Tapping any button will fire the +Alert – React Native | A framework for building native apps using React

Alert #

Edit on GitHub

Launches an alert dialog with the specified title and message.

Optionally provide a list of buttons. Tapping any button will fire the respective onPress callback and dismiss the alert. By default, the only button will be an 'OK' button.

This is an API that works both on iOS and Android and can show static alerts. To show an alert that prompts the user to enter some information, @@ -13,7 +13,7 @@ of a neutral, negative and a positive button:

  • If you specify one butt {text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel'}, {text: 'OK', onPress: () => console.log('OK Pressed')}, ] -)

Methods #

static alert(title, message?, buttons?, type?) #

Examples #

Edit on GitHub
'use strict'; +)

Methods #

static alert(title, message?, buttons?, type?) #

Examples #

Edit on GitHub
'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -134,7 +134,7 @@ of a neutral, negative and a positive button:

  • If you specify one butt module.exports = { AlertExample, SimpleAlertExampleBlock, -};
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/alertios.html b/docs/alertios.html index e6f4564699e..0c7f4fca53b 100644 --- a/docs/alertios.html +++ b/docs/alertios.html @@ -1,21 +1,32 @@ -AlertIOS – React Native | A framework for building native apps using React

AlertIOS #

Edit on GitHub

The AlertsIOS utility provides two functions: alert and prompt. All -functionality available through AlertIOS.alert is also available in the -cross-platform Alert.alert, which we recommend you use if you don't need -iOS-specific functionality.

AlertIOS.prompt allows you to prompt the user for input inside of an -alert popup.

Methods #

static alert(title, message?, callbackOrButtons?, type?) #

Creates a popup to alert the user. See -Alert.

  • title: string -- The dialog's title.
  • message: string -- An optional message that appears above the text input.
  • callbackOrButtons -- This optional argument should be either a -single-argument function or an array of buttons. If passed a function, -it will be called when the user taps 'OK'.

    If passed an array of button configurations, each button should include -a text key, as well as optional onPress and style keys. -style should be one of 'default', 'cancel' or 'destructive'.

  • type -- deprecated, do not use

Example:

AlertIOS.alert( +AlertIOS – React Native | A framework for building native apps using React

AlertIOS #

Edit on GitHub

AlertIOS provides functionality to create an iOS alert dialog with a +message or create a prompt for user input.

Creating an iOS alert:

AlertIOS.alert( 'Sync Complete', 'All your data are belong to us.' -);

static prompt(title, message?, callbackOrButtons?, type?, defaultValue?) #

Prompt the user to enter some text.

  • title: string -- The dialog's title.
  • message: string -- An optional message that appears above the text input.
  • callbackOrButtons -- This optional argument should be either a -single-argument function or an array of buttons. If passed a function, -it will be called with the prompt's value when the user taps 'OK'.

    If passed an array of button configurations, each button should include -a text key, as well as optional onPress and style keys (see example). -style should be one of 'default', 'cancel' or 'destructive'.

  • type: string -- This configures the text input. One of 'plain-text', -'secure-text' or 'login-password'.
  • defaultValue: string -- the default value for the text field.

Example with custom buttons:

AlertIOS.prompt( +);

Creating an iOS prompt:

AlertIOS.prompt( + 'Enter a value', + null, + text => console.log("You entered "+text) +);

We recommend using the Alert.alert method for +cross-platform support if you don't need to create iOS-only prompts.

Methods #

static alert(title, message?, callbackOrButtons?, type?) #

Create and display a popup alert.

Parameters:
Name and TypeDescription
title

string

The dialog's title.

[message]

string

An optional message that appears below + the dialog's title.

[callbackOrButtons]

?(() => void) | ButtonsArray

This optional argument should + be either a single-argument function or an array of buttons. If passed + a function, it will be called when the user taps 'OK'.

If passed an array of button configurations, each button should include + a text key, as well as optional onPress and style keys. style + should be one of 'default', 'cancel' or 'destructive'.

[type]

Deprecated, do not use.


Example with custom buttons:
AlertIOS.alert( + 'Update available', + 'Keep your app up to date to enjoy the latest features', + [ + {text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel'}, + {text: 'Install', onPress: () => console.log('Install Pressed')}, + ], +);

static prompt(title, message?, callbackOrButtons?, type?, defaultValue?) #

Create and display a prompt to enter some text.

Parameters:
Name and TypeDescription
title

string

The dialog's title.

[message]

string

An optional message that appears above the text + input.

[callbackOrButtons]

?((text: string) => void) | ButtonsArray

This optional argument should + be either a single-argument function or an array of buttons. If passed + a function, it will be called with the prompt's value when the user + taps 'OK'.

If passed an array of button configurations, each button should include + a text key, as well as optional onPress and style keys (see + example). style should be one of 'default', 'cancel' or 'destructive'.

[type]

This configures the text input. One of 'plain-text', + 'secure-text' or 'login-password'.

[defaultValue]

string

The dialog's title.


Example with custom buttons:
AlertIOS.prompt( 'Enter password', 'Enter your password to claim your $1.5B in lottery winnings', [ @@ -23,13 +34,13 @@ a text key, as well as optional onPress and styl {text: 'OK', onPress: password => console.log('OK Pressed, password: ' + password)}, ], 'secure-text' -);

Example with the default button and a custom callback:

AlertIOS.prompt( +);

Example with the default button and a custom callback:
AlertIOS.prompt( 'Update username', null, text => console.log("Your username is "+text), null, 'default' -)

Examples #

Edit on GitHub
'use strict'; +);

Type Definitions #

AlertType #

An Alert button type

Type:
$Enum

Constants:
ValueDescription
default

Default alert with no inputs

plain-text

Plain text input alert

secure-text

Secure text input alert

login-password

Login and password alert

AlertButtonStyle #

An Alert button style

Type:
$Enum

Constants:
ValueDescription
default

Default button style

cancel

Cancel button style

destructive

Destructive button style

ButtonsArray #

Array or buttons

Type:
Array

Properties:
Name and TypeDescription
[text]

string

Button label

[onPress]

function

Callback function when button pressed

[style]

Button style

Examples #

Edit on GitHub
'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -192,7 +203,7 @@ class PromptOptions extends : '#eeeeee', padding: 10, }, -});
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/android-building-from-source.html b/docs/android-building-from-source.html index de4191c2a3a..06b2cdf724e 100644 --- a/docs/android-building-from-source.html +++ b/docs/android-building-from-source.html @@ -1,5 +1,5 @@ -Building React Native from source – React Native | A framework for building native apps using React

Building React Native from source #

Edit on GitHub

You will need to build React Native from source if you want to work on a new feature/bug fix, try out the latest features which are not released yet, or maintain your own fork with patches that cannot be merged to the core.

Prerequisites #

Assuming you have the Android SDK installed, run android to open the Android SDK Manager.

Make sure you have the following installed:

  1. Android SDK version 23 (compileSdkVersion in build.gradle)
  2. SDK build tools version 23.0.1 (buildToolsVersion in build.gradle)
  3. Local Maven repository for Support Libraries (formerly Android Support Repository) >= 17 (for Android Support Library)
  4. Android NDK (download links and installation instructions below)

Point Gradle to your Android SDK: either have $ANDROID_SDK and $ANDROID_NDK defined, or create a local.properties file in the root of your react-native checkout with the following contents:

sdk.dir=absolute_path_to_android_sdk -ndk.dir=absolute_path_to_android_ndk

Example:

sdk.dir=/Users/your_unix_name/android-sdk-macosx +Building React Native from source – React Native | A framework for building native apps using React

Building React Native from source #

Edit on GitHub

You will need to build React Native from source if you want to work on a new feature/bug fix, try out the latest features which are not released yet, or maintain your own fork with patches that cannot be merged to the core.

Prerequisites #

Assuming you have the Android SDK installed, run android to open the Android SDK Manager.

Make sure you have the following installed:

  1. Android SDK version 23 (compileSdkVersion in build.gradle)
  2. SDK build tools version 23.0.1 (buildToolsVersion in build.gradle)
  3. Local Maven repository for Support Libraries (formerly Android Support Repository) >= 17 (for Android Support Library)
  4. Android NDK (download links and installation instructions below)

Point Gradle to your Android SDK: #

Step 1: Set environment variables through your local shell.

Note: Files may vary based on shell flavor. See below for examples from common shells.

  • bash: .bash_profile or .bashrc
  • zsh: .zprofile or .zshrc
  • ksh: .profile or $ENV

Example:

export ANDROID_SDK=/Users/your_unix_name/android-sdk-macosx +export ANDROID_NDK=/Users/your_unix_name/android-ndk/android-ndk-r10e

Step 2: Create a local.properties file in the android directory of your react-native app with the following contents:

Example:

sdk.dir=/Users/your_unix_name/android-sdk-macosx ndk.dir=/Users/your_unix_name/android-ndk/android-ndk-r10e

Download links for Android NDK #

  1. Mac OS (64-bit) - http://dl.google.com/android/repository/android-ndk-r10e-darwin-x86_64.zip
  2. Linux (64-bit) - http://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip
  3. Windows (64-bit) - http://dl.google.com/android/repository/android-ndk-r10e-windows-x86_64.zip
  4. Windows (32-bit) - http://dl.google.com/android/repository/android-ndk-r10e-windows-x86.zip

You can find further instructions on the official page.

Building the source #

1. Installing the fork #

First, you need to install react-native from your fork. For example, to install the master branch from the official repo, run the following:

npm install --save github:facebook/react-native#master

Alternatively, you can clone the repo to your node_modules directory and run npm install inside the cloned repo.

2. Adding gradle dependencies #

Add gradle-download-task as dependency in android/build.gradle:

... dependencies { classpath 'com.android.tools.build:gradle:1.3.1' @@ -28,7 +28,7 @@ dependencies { rootProject.allprojects { buildDir = "/path/to/build/directory/${rootProject.name}/${project.name}" } -}

Testing #

If you made changes to React Native and submit a pull request, all tests will run on your pull request automatically. To run the tests locally, see Testing.

Troubleshooting #

Gradle build fails in ndk-build. See the section about local.properties file above.

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/android-ui-performance.html b/docs/android-ui-performance.html index ed60f6bbf74..7532a022535 100644 --- a/docs/android-ui-performance.html +++ b/docs/android-ui-performance.html @@ -1,4 +1,4 @@ -Profiling Android UI Performance – React Native | A framework for building native apps using React

Profiling Android UI Performance #

Edit on GitHub

We try our best to deliver buttery-smooth UI performance by default, but sometimes that just isn't possible. Remember, Android supports 10k+ different phones and is generalized to support software rendering: the framework architecture and need to generalize across many hardware targets unfortunately means you get less for free relative to iOS. But sometimes, there are things you can improve (and many times it's not native code's fault at all!).

The first step for debugging this jank is to answer the fundamental question of where your time is being spent during each 16ms frame. For that, we'll be using a standard Android profiling tool called systrace. But first...

Make sure that JS dev mode is OFF!

You should see __DEV__ === false, development-level warning are OFF, performance optimizations are ON in your application logs (which you can view using adb logcat)

Profiling with Systrace #

Systrace is a standard Android marker-based profiling tool (and is installed when you install the Android platform-tools package). Profiled code blocks are surrounded by markers start/end markers which are then visualized in a colorful chart format. Both the Android SDK and React Native framework provide standard markers that you can visualize.

Collecting a trace #

NOTE:

Systrace support was added in react-native v0.15. You will need to build with that version to collect a trace.

First, connect a device that exhibits the stuttering you want to investigate to your computer via USB and get it to the point right before the navigation/animation you want to profile. Run systrace as follows

$ <path_to_android_sdk>/platform-tools/systrace/systrace.py --time=10 -o trace.html sched gfx view -a <your_package_name>

A quick breakdown of this command:

  • time is the length of time the trace will be collected in seconds
  • sched, gfx, and view are the android SDK tags (collections of markers) we care about: sched gives you information about what's running on each core of your phone, gfx gives you graphics info such as frame boundaries, and view gives you information about measure, layout, and draw passes
  • -a <your_package_name> enables app-specific markers, specifically the ones built into the React Native framework. your_package_name can be found in the AndroidManifest.xml of your app and looks like com.example.app

Once the trace starts collecting, perform the animation or interaction you care about. At the end of the trace, systrace will give you a link to the trace which you can open in your browser.

Reading the trace #

After opening the trace in your browser (preferably Chrome), you should see something like this:

Example

HINT: Use the WASD keys to strafe and zoom

Enable VSync highlighting #

The first thing you should do is highlight the 16ms frame boundaries if you haven't already done that. Check this checkbox at the top right of the screen:

Enable VSync Highlighting

You should see zebra stripes as in the screenshot above. If you don't, try profiling on a different device: Samsung has been known to have issues displaying vsyncs while the Nexus series is generally pretty reliable.

Find your process #

Scroll until you see (part of) the name of your package. In this case, I was profiling com.facebook.adsmanager, which shows up as book.adsmanager because of silly thread name limits in the kernel.

On the left side, you'll see a set of threads which correspond to the timeline rows on the right. There are three/four threads we care about for our purposes: the UI thread (which has your package name or the name UI Thread), mqt_js and mqt_native_modules. If you're running on Android 5+, we also care about the Render Thread.

UI Thread #

This is where standard android measure/layout/draw happens. The thread name on the right will be your package name (in my case book.adsmanager) or UI Thread. The events that you see on this thread should look something like this and have to do with Choreographer, traversals, and DispatchUI:

UI Thread Example

JS Thread #

This is where JS is executed. The thread name will be either mqt_js or <...> depending on how cooperative the kernel on your device is being. To identify it if it doesn't have a name, look for things like JSCall, Bridge.executeJSCall, etc:

JS Thread Example

Native Modules Thread #

This is where native module calls (e.g. the UIManager) are executed. The thread name will be either mqt_native_modules or <...>. To identify it in the latter case, look for things like NativeCall, callJavaModuleMethod, and onBatchComplete:

Native Modules Thread Example

Bonus: Render Thread #

If you're using Android L (5.0) and up, you will also have a render thread in your application. This thread generates the actual OpenGL commands used to draw your UI. The thread name will be either RenderThread or <...>. To identify it in the latter case, look for things like DrawFrame and queueBuffer:

Render Thread Example

Identifying a culprit #

A smooth animation should look something like the following:

Smooth Animation

Each change in color is a frame -- remember that in order to display a frame, all our UI work needs to be done by the end of that 16ms period. Notice that no thread is working close to the frame boundary. An application rendering like this is rendering at 60FPS.

If you noticed chop, however, you might see something like this:

Choppy Animation from JS

Notice that the JS thread is executing basically all the time, and across frame boundaries! This app is not rendering at 60FPS. In this case, the problem lies in JS.

You might also see something like this:

Choppy Animation from UI

In this case, the UI and render threads are the ones that have work crossing frame boundaries. The UI that we're trying to render on each frame is requiring too much work to be done. In this case, the problem lies in the native views being rendered.

At this point, you'll have some very helpful information to inform your next steps.

JS Issues #

If you identified a JS problem, look for clues in the specific JS that you're executing. In the scenario above, we see RCTEventEmitter being called multiple times per frame. Here's a zoom-in of the JS thread from the trace above:

Too much JS

This doesn't seem right. Why is it being called so often? Are they actually different events? The answers to these questions will probably depend on your product code. And many times, you'll want to look into shouldComponentUpdate.

TODO: Add more tools for profiling JS

Native UI Issues #

If you identified a native UI problem, there are usually two scenarios:

  1. the UI you're trying to draw each frame involves to much work on the GPU, or
  2. You're constructing new UI during the animation/interaction (e.g. loading in new content during a scroll).

Too much GPU work #

In the first scenario, you'll see a trace that has the UI thread and/or Render Thread looking like this:

Overloaded GPU

Notice the long amount of time spent in DrawFrame that crosses frame boundaries. This is time spent waiting for the GPU to drain its command buffer from the previous frame.

To mitigate this, you should:

  • investigate using renderToHardwareTextureAndroid for complex, static content that is being animated/transformed (e.g. the Navigator slide/alpha animations)
  • make sure that you are not using needsOffscreenAlphaCompositing, which is disabled by default, as it greatly increases the per-frame load on the GPU in most cases.

If these don't help and you want to dig deeper into what the GPU is actually doing, you can check out Tracer for OpenGL ES.

Creating new views on the UI thread #

In the second scenario, you'll see something more like this:

Creating Views

Notice that first the JS thread thinks for a bit, then you see some work done on the native modules thread, followed by an expensive traversal on the UI thread.

There isn't an easy way to mitigate this unless you're able to postpone creating new UI until after the interaction, or you are able to simplify the UI you're creating. The react native team is working on a infrastructure level solution for this that will allow new UI to be created and configured off the main thread, allowing the interaction to continue smoothly.

Still stuck? #

If you are confused or stuck, please post ask on Stack Overflow with the react-native tag. If you are unable to get a response there, or find an issue with a core component, please File a Github issue.

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.

Profiling Android UI Performance #

Edit on GitHub

We try our best to deliver buttery-smooth UI performance by default, but sometimes that just isn't possible. Remember, Android supports 10k+ different phones and is generalized to support software rendering: the framework architecture and need to generalize across many hardware targets unfortunately means you get less for free relative to iOS. But sometimes, there are things you can improve (and many times it's not native code's fault at all!).

The first step for debugging this jank is to answer the fundamental question of where your time is being spent during each 16ms frame. For that, we'll be using a standard Android profiling tool called systrace. But first...

Make sure that JS dev mode is OFF!

You should see __DEV__ === false, development-level warning are OFF, performance optimizations are ON in your application logs (which you can view using adb logcat)

Profiling with Systrace #

Systrace is a standard Android marker-based profiling tool (and is installed when you install the Android platform-tools package). Profiled code blocks are surrounded by markers start/end markers which are then visualized in a colorful chart format. Both the Android SDK and React Native framework provide standard markers that you can visualize.

Collecting a trace #

NOTE:

Systrace support was added in react-native v0.15. You will need to build with that version to collect a trace.

First, connect a device that exhibits the stuttering you want to investigate to your computer via USB and get it to the point right before the navigation/animation you want to profile. Run systrace as follows

$ <path_to_android_sdk>/platform-tools/systrace/systrace.py --time=10 -o trace.html sched gfx view -a <your_package_name>

A quick breakdown of this command:

  • time is the length of time the trace will be collected in seconds
  • sched, gfx, and view are the android SDK tags (collections of markers) we care about: sched gives you information about what's running on each core of your phone, gfx gives you graphics info such as frame boundaries, and view gives you information about measure, layout, and draw passes
  • -a <your_package_name> enables app-specific markers, specifically the ones built into the React Native framework. your_package_name can be found in the AndroidManifest.xml of your app and looks like com.example.app

Once the trace starts collecting, perform the animation or interaction you care about. At the end of the trace, systrace will give you a link to the trace which you can open in your browser.

Reading the trace #

After opening the trace in your browser (preferably Chrome), you should see something like this:

Example

HINT: Use the WASD keys to strafe and zoom

Enable VSync highlighting #

The first thing you should do is highlight the 16ms frame boundaries if you haven't already done that. Check this checkbox at the top right of the screen:

Enable VSync Highlighting

You should see zebra stripes as in the screenshot above. If you don't, try profiling on a different device: Samsung has been known to have issues displaying vsyncs while the Nexus series is generally pretty reliable.

Find your process #

Scroll until you see (part of) the name of your package. In this case, I was profiling com.facebook.adsmanager, which shows up as book.adsmanager because of silly thread name limits in the kernel.

On the left side, you'll see a set of threads which correspond to the timeline rows on the right. There are three/four threads we care about for our purposes: the UI thread (which has your package name or the name UI Thread), mqt_js and mqt_native_modules. If you're running on Android 5+, we also care about the Render Thread.

UI Thread #

This is where standard android measure/layout/draw happens. The thread name on the right will be your package name (in my case book.adsmanager) or UI Thread. The events that you see on this thread should look something like this and have to do with Choreographer, traversals, and DispatchUI:

UI Thread Example

JS Thread #

This is where JS is executed. The thread name will be either mqt_js or <...> depending on how cooperative the kernel on your device is being. To identify it if it doesn't have a name, look for things like JSCall, Bridge.executeJSCall, etc:

JS Thread Example

Native Modules Thread #

This is where native module calls (e.g. the UIManager) are executed. The thread name will be either mqt_native_modules or <...>. To identify it in the latter case, look for things like NativeCall, callJavaModuleMethod, and onBatchComplete:

Native Modules Thread Example

Bonus: Render Thread #

If you're using Android L (5.0) and up, you will also have a render thread in your application. This thread generates the actual OpenGL commands used to draw your UI. The thread name will be either RenderThread or <...>. To identify it in the latter case, look for things like DrawFrame and queueBuffer:

Render Thread Example

Identifying a culprit #

A smooth animation should look something like the following:

Smooth Animation

Each change in color is a frame -- remember that in order to display a frame, all our UI work needs to be done by the end of that 16ms period. Notice that no thread is working close to the frame boundary. An application rendering like this is rendering at 60FPS.

If you noticed chop, however, you might see something like this:

Choppy Animation from JS

Notice that the JS thread is executing basically all the time, and across frame boundaries! This app is not rendering at 60FPS. In this case, the problem lies in JS.

You might also see something like this:

Choppy Animation from UI

In this case, the UI and render threads are the ones that have work crossing frame boundaries. The UI that we're trying to render on each frame is requiring too much work to be done. In this case, the problem lies in the native views being rendered.

At this point, you'll have some very helpful information to inform your next steps.

JS Issues #

If you identified a JS problem, look for clues in the specific JS that you're executing. In the scenario above, we see RCTEventEmitter being called multiple times per frame. Here's a zoom-in of the JS thread from the trace above:

Too much JS

This doesn't seem right. Why is it being called so often? Are they actually different events? The answers to these questions will probably depend on your product code. And many times, you'll want to look into shouldComponentUpdate.

TODO: Add more tools for profiling JS

Native UI Issues #

If you identified a native UI problem, there are usually two scenarios:

  1. the UI you're trying to draw each frame involves to much work on the GPU, or
  2. You're constructing new UI during the animation/interaction (e.g. loading in new content during a scroll).

Too much GPU work #

In the first scenario, you'll see a trace that has the UI thread and/or Render Thread looking like this:

Overloaded GPU

Notice the long amount of time spent in DrawFrame that crosses frame boundaries. This is time spent waiting for the GPU to drain its command buffer from the previous frame.

To mitigate this, you should:

  • investigate using renderToHardwareTextureAndroid for complex, static content that is being animated/transformed (e.g. the Navigator slide/alpha animations)
  • make sure that you are not using needsOffscreenAlphaCompositing, which is disabled by default, as it greatly increases the per-frame load on the GPU in most cases.

If these don't help and you want to dig deeper into what the GPU is actually doing, you can check out Tracer for OpenGL ES.

Creating new views on the UI thread #

In the second scenario, you'll see something more like this:

Creating Views

Notice that first the JS thread thinks for a bit, then you see some work done on the native modules thread, followed by an expensive traversal on the UI thread.

There isn't an easy way to mitigate this unless you're able to postpone creating new UI until after the interaction, or you are able to simplify the UI you're creating. The react native team is working on a infrastructure level solution for this that will allow new UI to be created and configured off the main thread, allowing the interaction to continue smoothly.

Still stuck? #

If you are confused or stuck, please post ask on Stack Overflow with the react-native tag. If you are unable to get a response there, or find an issue with a core component, please File a Github issue.

Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/animated.html b/docs/animated.html index 29f180b6d64..aa5cc30936a 100644 --- a/docs/animated.html +++ b/docs/animated.html @@ -1,4 +1,4 @@ -Animated – React Native | A framework for building native apps using React

Animated #

Edit on GitHub

Animations are an important part of modern UX, and the Animated +Animated – React Native | A framework for building native apps using React

Animated #

Edit on GitHub

Animations are an important part of modern UX, and the Animated library is designed to make them fluid, powerful, and easy to build and maintain.

The simplest workflow is to create an Animated.Value, hook it up to one or more style attributes of an animated component, and then drive updates either @@ -58,18 +58,18 @@ event loop. This does influence the API, so keep that in mind when it seems a little trickier to do something compared to a fully synchronous system. Checkout Animated.Value.addListener as a way to work around some of these limitations, but use it sparingly since it might have performance -implications in the future.

Methods #

static decay(value, config) #

Animates a value from an initial velocity to zero based on a decay -coefficient.

static timing(value, config) #

Animates a value along a timed easing curve. The Easing module has tons -of pre-defined curves, or you can use your own function.

static spring(value, config) #

Spring animation based on Rebound and Origami. Tracks velocity state to -create fluid motions as the toValue updates, and can be chained together.

static add(a, b) #

Creates a new Animated value composed from two Animated values added -together.

static multiply(a, b) #

Creates a new Animated value composed from two Animated values multiplied -together.

static modulo(a, modulus) #

Creates a new Animated value that is the (non-negative) modulo of the -provided Animated value

static delay(time) #

Starts an animation after the given delay.

static sequence(animations) #

Starts an array of animations in order, waiting for each to complete +implications in the future.

Methods #

static decay(value, config) #

Animates a value from an initial velocity to zero based on a decay +coefficient.

static timing(value, config) #

Animates a value along a timed easing curve. The Easing module has tons +of pre-defined curves, or you can use your own function.

static spring(value, config) #

Spring animation based on Rebound and Origami. Tracks velocity state to +create fluid motions as the toValue updates, and can be chained together.

static add(a, b) #

Creates a new Animated value composed from two Animated values added +together.

static multiply(a, b) #

Creates a new Animated value composed from two Animated values multiplied +together.

static modulo(a, modulus) #

Creates a new Animated value that is the (non-negative) modulo of the +provided Animated value

static delay(time) #

Starts an animation after the given delay.

static sequence(animations) #

Starts an array of animations in order, waiting for each to complete before starting the next. If the current running animation is stopped, no -following animations will be started.

static parallel(animations, config?) #

Starts an array of animations all at the same time. By default, if one +following animations will be started.

static parallel(animations, config?) #

Starts an array of animations all at the same time. By default, if one of the animations is stopped, they will all be stopped. You can override -this with the stopTogether flag.

static stagger(time, animations) #

Array of animations may run in parallel (overlap), but are started in -sequence with successive delays. Nice for doing trailing effects.

static event(argMapping, config?) #

Takes an array of mappings and extracts values from each arg accordingly, +this with the stopTogether flag.

static stagger(time, animations) #

Array of animations may run in parallel (overlap), but are started in +sequence with successive delays. Nice for doing trailing effects.

static event(argMapping, config?) #

Takes an array of mappings and extracts values from each arg accordingly, then calls setValue on the mapped outputs. e.g.

onScroll={Animated.event( [{nativeEvent: {contentOffset: {x: this._scrollX}}}] {listener}, // Optional async listener @@ -78,21 +78,21 @@ sequence with successive delays. Nice for doing trailing effects.

: Animated.event([ null, // raw event arg ignored {dx: this._panX}, // gestureState arg - ]),

static createAnimatedComponent(Component) #

Make any React component Animatable. Used to create Animated.View, etc.

Properties #

Value: AnimatedValue #

Standard value class for driving animations. Typically initialized with + ]),

static createAnimatedComponent(Component) #

Make any React component Animatable. Used to create Animated.View, etc.

Properties #

Value: AnimatedValue #

Standard value class for driving animations. Typically initialized with new Animated.Value(0);

ValueXY: AnimatedValueXY #

2D value class for driving 2D animations, such as pan gestures.

class AnimatedValue #

    Standard value for driving animations. One Animated.Value can drive multiple properties in a synchronized fashion, but can only be driven by one mechanism at a time. Using a new mechanism (e.g. starting a new animation, -or calling setValue) will stop any previous ones.

    Methods #

    constructor(value) #

    setValue(value) #

    Directly set the value. This will stop any animations running on the value -and update all the bound properties.

    setOffset(offset) #

    Sets an offset that is applied on top of whatever value is set, whether via +or calling setValue) will stop any previous ones.

    Methods #

    constructor(value) #

    setValue(value) #

    Directly set the value. This will stop any animations running on the value +and update all the bound properties.

    setOffset(offset) #

    Sets an offset that is applied on top of whatever value is set, whether via setValue, an animation, or Animated.event. Useful for compensating -things like the start of a pan gesture.

    flattenOffset() #

    Merges the offset value into the base value and resets the offset to zero. -The final output of the value is unchanged.

    addListener(callback) #

    Adds an asynchronous listener to the value so you can observe updates from +things like the start of a pan gesture.

    flattenOffset(0) #

    Merges the offset value into the base value and resets the offset to zero. +The final output of the value is unchanged.

    addListener(callback) #

    Adds an asynchronous listener to the value so you can observe updates from animations. This is useful because there is no way to -synchronously read the value because it might be driven natively.

    removeListener(id) #

    removeAllListeners() #

    stopAnimation(callback?) #

    Stops any running animation or tracking. callback is invoked with the +synchronously read the value because it might be driven natively.

    removeListener(id) #

    removeAllListeners(0) #

    stopAnimation(callback?) #

    Stops any running animation or tracking. callback is invoked with the final value after stopping the animation, which is useful for updating -state to match the animation position with layout.

    interpolate(config) #

    Interpolates the value before updating the property, e.g. mapping 0-1 to -0-10.

    animate(animation, callback) #

    Typically only used internally, but could be used by a custom Animation -class.

    stopTracking() #

    Typically only used internally.

    track(tracking) #

    Typically only used internally.

class AnimatedValueXY #

    2D Value for driving 2D animations, such as pan gestures. Almost identical +state to match the animation position with layout.

interpolate(config) #

Interpolates the value before updating the property, e.g. mapping 0-1 to +0-10.

animate(animation, callback) #

Typically only used internally, but could be used by a custom Animation +class.

stopTracking(0) #

Typically only used internally.

track(tracking) #

Typically only used internally.

class AnimatedValueXY #

    2D Value for driving 2D animations, such as pan gestures. Almost identical API to normal Animated.Value, but multiplexed. Contains two regular Animated.Values under the hood. Example:

    class DraggableView extends React.Component { constructor(props) { @@ -123,9 +123,9 @@ API to normal Animated.Value, but multiplexed. Contains two regula </Animated.View> ); } - }

    Methods #

    constructor(valueIn?) #

    setValue(value) #

    setOffset(offset) #

    flattenOffset() #

    stopAnimation(callback?) #

    addListener(callback) #

    removeListener(id) #

    getLayout() #

    Converts {x, y} into {left, top} for use in style, e.g.

    style={this.state.anim.getLayout()}

    getTranslateTransform() #

    Converts {x, y} into a useable translation transform, e.g.

    style={{ + }

    Methods #

    constructor(valueIn?) #

    setValue(value) #

    setOffset(offset) #

    flattenOffset(0) #

    stopAnimation(callback?) #

    addListener(callback) #

    removeListener(id) #

    getLayout(0) #

    Converts {x, y} into {left, top} for use in style, e.g.

    style={this.state.anim.getLayout()}

    getTranslateTransform(0) #

    Converts {x, y} into a useable translation transform, e.g.

    style={{ transform: this.state.anim.getTranslateTransform() - }}

Examples #

Edit on GitHub
'use strict'; + }}

Examples #

Edit on GitHub
'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -345,7 +345,7 @@ exports.examples : 10, alignItems: 'center', }, -});
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/animations.html b/docs/animations.html index c4a62bc4de6..a460d2a0775 100644 --- a/docs/animations.html +++ b/docs/animations.html @@ -1,4 +1,4 @@ -Animations – React Native | A framework for building native apps using React

Animations #

Edit on GitHub

Fluid, meaningful animations are essential to the mobile user experience. Like +Animations – React Native | A framework for building native apps using React

Animations #

Edit on GitHub

Fluid, meaningful animations are essential to the mobile user experience. Like everything in React Native, Animation APIs for React Native are currently under development, but have started to coalesce around two complementary systems: LayoutAnimation for animated global layout transactions, and Animated for @@ -8,13 +8,13 @@ performant way. Animated focuses on declarative relationships betwe and outputs, with configurable transforms in between, and simple start/stop methods to control time-based animation execution. For example, a complete component with a simple spring bounce on mount looks like this:

class Playground extends React.Component { - constructor(props: any) { + constructor(props) { super(props); this.state = { bounceValue: new Animated.Value(0), }; } - render(): ReactElement { + render() { return ( <Animated.Image // Base: Image, Text, View source={{uri: 'http://i.imgur.com/XMKOH81.jpg'}} @@ -159,7 +159,7 @@ what you want.

Note that in order to get this to work on AndroidcomponentWillMount() { // Animate creation LayoutAnimation.spring(); - }, + } _onPress() { // Animate the update @@ -179,7 +179,7 @@ what you want.

Note that in order to get this to work on Android/View> ); } -};

Run this example

This example uses a preset value, you can customize the animations as +}

Run this example

This example uses a preset value, you can customize the animations as you need, see LayoutAnimation.js for more information.

requestAnimationFrame #

requestAnimationFrame is a polyfill from the browser that you might be familiar with. It accepts a function as its only argument and calls that @@ -375,7 +375,7 @@ make them customizable, React Native exposes a pop: CustomLeftToRightGesture, } });

Run this example

For further information about customizing scene transitions, read the -source.

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/appregistry.html b/docs/appregistry.html index 8cb6e97add6..d03cdff5260 100644 --- a/docs/appregistry.html +++ b/docs/appregistry.html @@ -1,4 +1,4 @@ -AppRegistry – React Native | A framework for building native apps using React

AppRegistry #

Edit on GitHub

AppRegistry is the JS entry point to running all React Native apps. App +AppRegistry – React Native | A framework for building native apps using React

AppRegistry #

Edit on GitHub

AppRegistry is the JS entry point to running all React Native apps. App root components should register themselves with AppRegistry.registerComponent, then the native system can load the bundle for the app and then actually run the app when it's ready by invoking @@ -6,7 +6,7 @@ for the app and then actually run the app when it's ready by invoking AppRegistry.unmountApplicationComponentAtRootTag with the tag that was pass into runApplication. These should always be used as a pair.

AppRegistry should be required early in the require sequence to make sure the JS execution environment is setup before other modules are -required.

Methods #

static registerConfig(config) #

static registerComponent(appKey, getComponentFunc) #

static registerRunnable(appKey, func) #

static getAppKeys() #

static runApplication(appKey, appParameters) #

static unmountApplicationComponentAtRootTag(rootTag) #

© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/appstate.html b/docs/appstate.html index a4c6837b523..a9a648212d5 100644 --- a/docs/appstate.html +++ b/docs/appstate.html @@ -1,4 +1,4 @@ -AppState – React Native | A framework for building native apps using React

AppState #

Edit on GitHub

AppState can tell you if the app is in the foreground or background, +AppState – React Native | A framework for building native apps using React

AppState #

Edit on GitHub

AppState can tell you if the app is in the foreground or background, and notify you when the state changes.

AppState is frequently used to determine the intent and proper behavior when handling push notifications.

App States #

  • active - The app is running in the foreground
  • background - The app is running in the background. The user is either in another app or on the home screen
  • inactive - This is a state that occurs when transitioning between @@ -26,12 +26,12 @@ render: funct ); },

This example will only ever appear to say "Current state is: active" because the app is only visible to the user when in the active state, and the null -state will happen only momentarily.

Methods #

constructor() #

addEventListener(type, handler) #

Add a handler to AppState changes by listening to the change event type +state will happen only momentarily.

Methods #

constructor(0) #

addEventListener(type, handler) #

Add a handler to AppState changes by listening to the change event type and providing the handler

TODO: now that AppState is a subclass of NativeEventEmitter, we could deprecate addEventListener and removeEventListener and just use addListener and listener.remove() directly. That will be a breaking change though, as both the method and event names are different (addListener events are currently -required to be globally unique).

removeEventListener(type, handler) #

Remove a handler by passing the change event type and the handler

Examples #

Edit on GitHub
'use strict'; +required to be globally unique).

removeEventListener(type, handler) #

Remove a handler by passing the change event type and the handler

Examples #

Edit on GitHub
'use strict'; const React = require('react'); const ReactNative = require('react-native'); @@ -114,7 +114,7 @@ exports.examples : 'In the IOS simulator, hit Shift+Command+M to simulate a memory warning.', render(): ReactElement<any> { return <AppStateSubscription showMemoryWarnings={true} />; } }, -];
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/asyncstorage.html b/docs/asyncstorage.html index d7fcff2beea..5f1dc439de2 100644 --- a/docs/asyncstorage.html +++ b/docs/asyncstorage.html @@ -1,20 +1,35 @@ -AsyncStorage – React Native | A framework for building native apps using React

AsyncStorage #

Edit on GitHub

AsyncStorage is a simple, asynchronous, persistent, key-value storage -system that is global to the app. It should be used instead of LocalStorage.

It is recommended that you use an abstraction on top of AsyncStorage instead -of AsyncStorage directly for anything more than light usage since it -operates globally.

On iOS, AsyncStorage is backed by native code that stores small values in a serialized -dictionary and larger values in separate files. On Android, AsyncStorage will use either -RocksDB or SQLite based on what is available. This JS code is a simple facade that -provides a clear JS API, real Error objects, and simple non-multi functions. Each -method returns a Promise object.

Methods #

static getItem(key, callback?) #

Fetches key and passes the result to callback, along with an Error if -there is any. Returns a Promise object.

static setItem(key, value, callback?) #

Sets value for key and calls callback on completion, along with an -Error if there is any. Returns a Promise object.

static removeItem(key, callback?) #

Returns a Promise object.

static mergeItem(key, value, callback?) #

Merges existing value with input value, assuming they are stringified json. -Returns a Promise object. Not supported by all native implementations.

Example:

let UID123_object = { +AsyncStorage – React Native | A framework for building native apps using React

AsyncStorage #

Edit on GitHub

AsyncStorage is a simple, asynchronous, persistent, key-value storage +system that is global to the app. It should be used instead of LocalStorage.

It is recommended that you use an abstraction on top of AsyncStorage +instead of AsyncStorage directly for anything more than light usage since +it operates globally.

On iOS, AsyncStorage is backed by native code that stores small values in a +serialized dictionary and larger values in separate files. On Android, +AsyncStorage will use either RocksDB or SQLite +based on what is available.

The AsyncStorage JavaScript code is a simple facade that provides a clear +JavaScript API, real Error objects, and simple non-multi functions. Each +method in the API returns a Promise object.

Persisting data:

try { + await AsyncStorage.setItem('@MySuperStore:key', 'I like to save it.'); +} catch (error) { + // Error saving data +}

Fetching data:

try { + const value = await AsyncStorage.getItem('@MySuperStore:key'); + if (value !== null){ + // We have data!! + console.log(value); + } +} catch (error) { + // Error retrieving data +}

Methods #

static getItem(key, callback?) #

Fetches an item for a key and invokes a callback upon completion. +Returns a Promise object.

Parameters:
Name and TypeDescription
key

string

Key of the item to fetch.

[callback]

?(error: ?Error, result: ?string) => void

Function that will be called with a result if found or + any error.

static setItem(key, value, callback?) #

Sets the value for a key and invokes a callback upon completion. +Returns a Promise object.

Parameters:
Name and TypeDescription
key

string

Key of the item to set.

value

string

Value to set for the key.

[callback]

?(error: ?Error) => void

Function that will be called with any error.

static removeItem(key, callback?) #

Removes an item for a key and invokes a callback upon completion. +Returns a Promise object.

Parameters:
Name and TypeDescription
key

string

Key of the item to remove.

[callback]

?(error: ?Error) => void

Function that will be called with any error.

static mergeItem(key, value, callback?) #

Merges an existing key value with an input value, assuming both values +are stringified JSON. Returns a Promise object.

NOTE: This is not supported by all native implementations.

Parameters:
Name and TypeDescription
key

string

Key of the item to modify.

value

string

New value to merge for the key.

[callback]

?(error: ?Error) => void

Function that will be called with any error.


Example:
+let UID123_object = { name: 'Chris', age: 30, traits: {hair: 'brown', eyes: 'brown'}, -}; - -// need only define what will be added or updated +}; +// You only need to define what will be added or updated let UID123_delta = { age: 31, traits: {eyes: 'blue', shoe_size: 10} @@ -24,13 +39,19 @@ AsyncStorage..mergeItem('UID123', JSON.stringify(UID123_delta), () => { AsyncStorage.getItem('UID123', (err, result) => { console.log(result); - // => {'name':'Chris','age':31,'traits':{'shoe_size':10,'hair':'brown','eyes':'blue'}} - }); + }); }); -});

static clear(callback?) #

Erases all AsyncStorage for all clients, libraries, etc. You probably -don't want to call this - use removeItem or multiRemove to clear only your -own keys instead. Returns a Promise object.

static getAllKeys(callback?) #

Gets all keys known to the app, for all callers, libraries, etc. Returns a Promise object.

Example: see multiGet for example

static flushGetRequests() #

Flushes any pending requests using a single multiget

static multiGet(keys, callback?) #

multiGet invokes callback with an array of key-value pair arrays that -matches the input format of multiSet. Returns a Promise object.

multiGet(['k1', 'k2'], cb) -> cb([['k1', 'val1'], ['k2', 'val2']])

Example:

AsyncStorage.getAllKeys((err, keys) => { +}); + +// Console log result: +// => {'name':'Chris','age':31,'traits': +// {'shoe_size':10,'hair':'brown','eyes':'blue'}}

static clear(callback?) #

Erases all AsyncStorage for all clients, libraries, etc. You probably +don't want to call this; use removeItem or multiRemove to clear only +your app's keys. Returns a Promise object.

Parameters:
Name and TypeDescription
[callback]

?(error: ?Error) => void

Function that will be called with any error.

static getAllKeys(callback?) #

Gets all keys known to your app; for all callers, libraries, etc. +Returns a Promise object.

Parameters:
Name and TypeDescription
[callback]

?(error: ?Error, keys: ?Array<string>) => void

Function that will be called the keys found and any error.

static flushGetRequests() #

Flushes any pending requests using a single batch call to get the data.

static multiGet(keys, callback?) #

This allows you to batch the fetching of items given an array of key +inputs. Your callback will be invoked with an array of corresponding +key-value pairs found:

multiGet(['k1', 'k2'], cb) -> cb([['k1', 'val1'], ['k2', 'val2']])

The method returns a Promise object.

Parameters:
Name and TypeDescription
keys

Array<string>

Array of key for the items to get.

[callback]

?(errors: ?Array<Error>, result: ?Array<Array<string>>) => void

Function that will be called with a key-value array of + the results, plus an array of any key-specific errors found.


Example:
AsyncStorage.getAllKeys((err, keys) => { AsyncStorage.multiGet(keys, (err, stores) => { stores.map((result, i, store) => { // get at each store's key/value so you can work with it @@ -38,13 +59,20 @@ matches the input format of multiSet. Returns a Promise object.

let value = store[i][1]; }); }); -});

static multiSet(keyValuePairs, callback?) #

multiSet and multiMerge take arrays of key-value array pairs that match -the output of multiGet, e.g. Returns a Promise object.

multiSet([['k1', 'val1'], ['k2', 'val2']], cb);

Example: see multiMerge for an example

static multiRemove(keys, callback?) #

Delete all the keys in the keys array. Returns a Promise object.

Example:

let keys = ['k1', 'k2']; +});

static multiSet(keyValuePairs, callback?) #

Use this as a batch operation for storing multiple key-value pairs. When +the operation completes you'll get a single callback with any errors:

multiSet([['k1', 'val1'], ['k2', 'val2']], cb);

The method returns a Promise object.

Parameters:
Name and TypeDescription
keyValuePairs

Array<Array<string>>

Array of key-value array for the items to set.

[callback]

?(errors: ?Array<Error>) => void

Function that will be called with an array of any + key-specific errors found.

static multiRemove(keys, callback?) #

Call this to batch the deletion of all keys in the keys array. Returns +a Promise object.

Parameters:
Name and TypeDescription
keys

Array<string>

Array of key for the items to delete.

[callback]

?(errors: ?Array<Error>) => void

Function that will be called an array of any key-specific + errors found.


Example:
+let keys = ['k1', 'k2']; AsyncStorage.multiRemove(keys, (err) => { // keys k1 & k2 removed, if they existed // do most stuff after removal (if you want) -});

static multiMerge(keyValuePairs, callback?) #

Merges existing values with input values, assuming they are stringified -json. Returns a Promise object.

Not supported by all native implementations.

Example:

// first user, initial values +});

static multiMerge(keyValuePairs, callback?) #

Batch operation to merge in existing and new values for a given set of +keys. This assumes that the values are stringified JSON. Returns a +Promise object.

NOTE: This is not supported by all native implementations.

Parameters:
Name and TypeDescription
keyValuePairs

Array<Array<string>>

Array of key-value array for the items to merge.

[callback]

?(errors: ?Array<Error>) => void

Function that will be called with an array of any + key-specific errors found.


Example:
+// first user, initial values let UID234_object = { name: 'Chris', age: 30, @@ -80,12 +108,14 @@ AsyncStorage.let key = store[i][0]; let val = store[i][1]; console.log(key, val); - // => UID234 {"name":"Chris","age":31,"traits":{"shoe_size":10,"hair":"brown","eyes":"blue"}} - // => UID345 {"name":"Marge","age":26,"traits":{"shoe_size":6,"hair":"blonde","eyes":"green"}} - }); + }); }); }); -});

Properties #

Examples #

Edit on GitHub
'use strict'; +}); + +// Console log results: +// => UID234 {"name":"Chris","age":31,"traits":{"shoe_size":10,"hair":"brown","eyes":"blue"}} +// => UID345 {"name":"Marge","age":26,"traits":{"shoe_size":6,"hair":"blonde","eyes":"green"}}

Examples #

Edit on GitHub
'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -189,7 +219,7 @@ exports.examples : 'Basics - getItem, setItem, removeItem', render(): ReactElement<any> { return <BasicStorageExample />; } }, -];
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/backandroid.html b/docs/backandroid.html index 7d0d90375c1..958fcb63b50 100644 --- a/docs/backandroid.html +++ b/docs/backandroid.html @@ -1,11 +1,11 @@ -BackAndroid – React Native | A framework for building native apps using React

BackAndroid #

Edit on GitHub

Detect hardware back button presses, and programmatically invoke the default back button +BackAndroid – React Native | A framework for building native apps using React

BackAndroid #

Edit on GitHub

Detect hardware back button presses, and programmatically invoke the default back button functionality to exit the app if there are no listeners or if none of the listeners return true.

Example:

BackAndroid.addEventListener('hardwareBackPress', function() { if (!this.onMainScreen()) { this.goBack(); return true; } return false; -});

Methods #

static exitApp() #

static addEventListener(eventName, handler) #

static removeEventListener(eventName, handler) #

© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/cameraroll.html b/docs/cameraroll.html index ea2b1a62d6b..b7f18fbb117 100644 --- a/docs/cameraroll.html +++ b/docs/cameraroll.html @@ -1,13 +1,15 @@ -CameraRoll – React Native | A framework for building native apps using React

CameraRoll #

Edit on GitHub

CameraRoll provides access to the local camera roll / gallery.

Methods #

static saveImageWithTag(tag) #

Saves the image to the camera roll / gallery.

On Android, the tag is a local URI, such as "file:///sdcard/img.png".

On iOS, the tag can be one of the following:

  • local URI
  • assets-library tag
  • a tag not matching any of the above, which means the image data will -be stored in memory (and consume memory as long as the process is alive)

Returns a Promise which when resolved will be passed the new URI.

static getPhotos(params) #

Returns a Promise with photo identifier objects from the local camera -roll of the device matching shape defined by getPhotosReturnChecker.

@param {object} params See getPhotosParamChecker.

Returns a Promise which when resolved will be of shape getPhotosReturnChecker.

Examples #

Edit on GitHub
'use strict'; +CameraRoll – React Native | A framework for building native apps using React

CameraRoll #

Edit on GitHub

CameraRoll provides access to the local camera roll / gallery.

Methods #

static saveImageWithTag(tag) #

static saveToCameraRoll(tag, type?) #

Saves the photo or video to the camera roll / gallery.

On Android, the tag must be a local image or video URI, such as "file:///sdcard/img.png".

On iOS, the tag can be any image URI (including local, remote asset-library and base64 data URIs) +or a local video file URI (remote or data URIs are not supported for saving video at this time).

If the tag has a file extension of .mov or .mp4, it will be inferred as a video. Otherwise +it will be treated as a photo. To override the automatic choice, you can pass an optional +type parameter that must be one of 'photo' or 'video'.

Returns a Promise which will resolve with the new URI.

static getPhotos(params) #

Returns a Promise with photo identifier objects from the local camera +roll of the device matching shape defined by getPhotosReturnChecker.

@param {object} params See getPhotosParamChecker.

Returns a Promise which when resolved will be of shape getPhotosReturnChecker.

Examples #

Edit on GitHub
'use strict'; const React = require('react'); const ReactNative = require('react-native'); const { CameraRoll, Image, - SliderIOS, + Slider, StyleSheet, Switch, Text, @@ -38,7 +40,7 @@ const CameraRollExample = React={this._onSwitchChange} value={this.state.bigImages} /> <Text>{(this.state.bigImages ? 'Big' : 'Small') + ' Images'}</Text> - <SliderIOS + <Slider value={this.state.sliderValue} onValueChange={this._onSliderChange} /> @@ -126,7 +128,7 @@ exports.examples : 'Photos', render(): ReactElement<any> { return <CameraRollExample />; } } -];
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/clipboard.html b/docs/clipboard.html index c98bd44d83a..ae83295dc5f 100644 --- a/docs/clipboard.html +++ b/docs/clipboard.html @@ -1,8 +1,8 @@ -Clipboard – React Native | A framework for building native apps using React

Clipboard #

Edit on GitHub

Clipboard gives you an interface for setting and getting content from Clipboard on both iOS and Android

Methods #

static getString() #

Get content of string type, this method returns a Promise, so you can use following code to get clipboard content

async _getContent() { +Clipboard – React Native | A framework for building native apps using React

Clipboard #

Edit on GitHub

Clipboard gives you an interface for setting and getting content from Clipboard on both iOS and Android

Methods #

static getString(0) #

Get content of string type, this method returns a Promise, so you can use following code to get clipboard content

async _getContent() { var content = await Clipboard.getString(); -}

static setString(content) #

Set content of string type. You can use following code to set clipboard content

_setContent() { +}

static setString(content) #

Set content of string type. You can use following code to set clipboard content

_setContent() { Clipboard.setString('hello world'); -}

@param the content to be stored in the clipboard.

Examples #

Edit on GitHub
'use strict'; +}

@param the content to be stored in the clipboard.

Examples #

Edit on GitHub
'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -52,7 +52,7 @@ exports.examples return <ClipboardExample/>; } } -];
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/colors.html b/docs/colors.html index c2cd14e37fc..c1e46285a0d 100644 --- a/docs/colors.html +++ b/docs/colors.html @@ -1,4 +1,4 @@ -Colors – React Native | A framework for building native apps using React

Colors #

Edit on GitHub

The following formats are supported:

  • '#f0f' (#rgb)
  • '#f0fc' (#rgba)
  • '#ff00ff' (#rrggbb)
  • '#ff00ff00' (#rrggbbaa)
  • 'rgb(255, 255, 255)'
  • 'rgba(255, 255, 255, 1.0)'
  • 'hsl(360, 100%, 100%)'
  • 'hsla(360, 100%, 100%, 1.0)'
  • 'transparent'
  • 'red'
  • 0xff00ff00 (0xrrggbbaa)

For the named colors, React Native follows the CSS3 specification:

  • aliceblue (#f0f8ff)
  • antiquewhite (#faebd7)
  • aqua (#00ffff)
  • aquamarine (#7fffd4)
  • azure (#f0ffff)
  • beige (#f5f5dc)
  • bisque (#ffe4c4)
  • black (#000000)
  • blanchedalmond (#ffebcd)
  • blue (#0000ff)
  • blueviolet (#8a2be2)
  • brown (#a52a2a)
  • burlywood (#deb887)
  • cadetblue (#5f9ea0)
  • chartreuse (#7fff00)
  • chocolate (#d2691e)
  • coral (#ff7f50)
  • cornflowerblue (#6495ed)
  • cornsilk (#fff8dc)
  • crimson (#dc143c)
  • cyan (#00ffff)
  • darkblue (#00008b)
  • darkcyan (#008b8b)
  • darkgoldenrod (#b8860b)
  • darkgray (#a9a9a9)
  • darkgreen (#006400)
  • darkgrey (#a9a9a9)
  • darkkhaki (#bdb76b)
  • darkmagenta (#8b008b)
  • darkolivegreen (#556b2f)
  • darkorange (#ff8c00)
  • darkorchid (#9932cc)
  • darkred (#8b0000)
  • darksalmon (#e9967a)
  • darkseagreen (#8fbc8f)
  • darkslateblue (#483d8b)
  • darkslategray (#2f4f4f)
  • darkslategrey (#2f4f4f)
  • darkturquoise (#00ced1)
  • darkviolet (#9400d3)
  • deeppink (#ff1493)
  • deepskyblue (#00bfff)
  • dimgray (#696969)
  • dimgrey (#696969)
  • dodgerblue (#1e90ff)
  • firebrick (#b22222)
  • floralwhite (#fffaf0)
  • forestgreen (#228b22)
  • fuchsia (#ff00ff)
  • gainsboro (#dcdcdc)
  • ghostwhite (#f8f8ff)
  • gold (#ffd700)
  • goldenrod (#daa520)
  • gray (#808080)
  • green (#008000)
  • greenyellow (#adff2f)
  • grey (#808080)
  • honeydew (#f0fff0)
  • hotpink (#ff69b4)
  • indianred (#cd5c5c)
  • indigo (#4b0082)
  • ivory (#fffff0)
  • khaki (#f0e68c)
  • lavender (#e6e6fa)
  • lavenderblush (#fff0f5)
  • lawngreen (#7cfc00)
  • lemonchiffon (#fffacd)
  • lightblue (#add8e6)
  • lightcoral (#f08080)
  • lightcyan (#e0ffff)
  • lightgoldenrodyellow (#fafad2)
  • lightgray (#d3d3d3)
  • lightgreen (#90ee90)
  • lightgrey (#d3d3d3)
  • lightpink (#ffb6c1)
  • lightsalmon (#ffa07a)
  • lightseagreen (#20b2aa)
  • lightskyblue (#87cefa)
  • lightslategray (#778899)
  • lightslategrey (#778899)
  • lightsteelblue (#b0c4de)
  • lightyellow (#ffffe0)
  • lime (#00ff00)
  • limegreen (#32cd32)
  • linen (#faf0e6)
  • magenta (#ff00ff)
  • maroon (#800000)
  • mediumaquamarine (#66cdaa)
  • mediumblue (#0000cd)
  • mediumorchid (#ba55d3)
  • mediumpurple (#9370db)
  • mediumseagreen (#3cb371)
  • mediumslateblue (#7b68ee)
  • mediumspringgreen (#00fa9a)
  • mediumturquoise (#48d1cc)
  • mediumvioletred (#c71585)
  • midnightblue (#191970)
  • mintcream (#f5fffa)
  • mistyrose (#ffe4e1)
  • moccasin (#ffe4b5)
  • navajowhite (#ffdead)
  • navy (#000080)
  • oldlace (#fdf5e6)
  • olive (#808000)
  • olivedrab (#6b8e23)
  • orange (#ffa500)
  • orangered (#ff4500)
  • orchid (#da70d6)
  • palegoldenrod (#eee8aa)
  • palegreen (#98fb98)
  • paleturquoise (#afeeee)
  • palevioletred (#db7093)
  • papayawhip (#ffefd5)
  • peachpuff (#ffdab9)
  • peru (#cd853f)
  • pink (#ffc0cb)
  • plum (#dda0dd)
  • powderblue (#b0e0e6)
  • purple (#800080)
  • rebeccapurple (#663399)
  • red (#ff0000)
  • rosybrown (#bc8f8f)
  • royalblue (#4169e1)
  • saddlebrown (#8b4513)
  • salmon (#fa8072)
  • sandybrown (#f4a460)
  • seagreen (#2e8b57)
  • seashell (#fff5ee)
  • sienna (#a0522d)
  • silver (#c0c0c0)
  • skyblue (#87ceeb)
  • slateblue (#6a5acd)
  • slategray (#708090)
  • slategrey (#708090)
  • snow (#fffafa)
  • springgreen (#00ff7f)
  • steelblue (#4682b4)
  • tan (#d2b48c)
  • teal (#008080)
  • thistle (#d8bfd8)
  • tomato (#ff6347)
  • turquoise (#40e0d0)
  • violet (#ee82ee)
  • wheat (#f5deb3)
  • white (#ffffff)
  • whitesmoke (#f5f5f5)
  • yellow (#ffff00)
  • yellowgreen (#9acd32)

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.

Colors #

Edit on GitHub

The following formats are supported:

  • '#f0f' (#rgb)
  • '#f0fc' (#rgba)
  • '#ff00ff' (#rrggbb)
  • '#ff00ff00' (#rrggbbaa)
  • 'rgb(255, 255, 255)'
  • 'rgba(255, 255, 255, 1.0)'
  • 'hsl(360, 100%, 100%)'
  • 'hsla(360, 100%, 100%, 1.0)'
  • 'transparent'
  • 'red'
  • 0xff00ff00 (0xrrggbbaa)

For the named colors, React Native follows the CSS3 specification:

  • aliceblue (#f0f8ff)
  • antiquewhite (#faebd7)
  • aqua (#00ffff)
  • aquamarine (#7fffd4)
  • azure (#f0ffff)
  • beige (#f5f5dc)
  • bisque (#ffe4c4)
  • black (#000000)
  • blanchedalmond (#ffebcd)
  • blue (#0000ff)
  • blueviolet (#8a2be2)
  • brown (#a52a2a)
  • burlywood (#deb887)
  • cadetblue (#5f9ea0)
  • chartreuse (#7fff00)
  • chocolate (#d2691e)
  • coral (#ff7f50)
  • cornflowerblue (#6495ed)
  • cornsilk (#fff8dc)
  • crimson (#dc143c)
  • cyan (#00ffff)
  • darkblue (#00008b)
  • darkcyan (#008b8b)
  • darkgoldenrod (#b8860b)
  • darkgray (#a9a9a9)
  • darkgreen (#006400)
  • darkgrey (#a9a9a9)
  • darkkhaki (#bdb76b)
  • darkmagenta (#8b008b)
  • darkolivegreen (#556b2f)
  • darkorange (#ff8c00)
  • darkorchid (#9932cc)
  • darkred (#8b0000)
  • darksalmon (#e9967a)
  • darkseagreen (#8fbc8f)
  • darkslateblue (#483d8b)
  • darkslategray (#2f4f4f)
  • darkslategrey (#2f4f4f)
  • darkturquoise (#00ced1)
  • darkviolet (#9400d3)
  • deeppink (#ff1493)
  • deepskyblue (#00bfff)
  • dimgray (#696969)
  • dimgrey (#696969)
  • dodgerblue (#1e90ff)
  • firebrick (#b22222)
  • floralwhite (#fffaf0)
  • forestgreen (#228b22)
  • fuchsia (#ff00ff)
  • gainsboro (#dcdcdc)
  • ghostwhite (#f8f8ff)
  • gold (#ffd700)
  • goldenrod (#daa520)
  • gray (#808080)
  • green (#008000)
  • greenyellow (#adff2f)
  • grey (#808080)
  • honeydew (#f0fff0)
  • hotpink (#ff69b4)
  • indianred (#cd5c5c)
  • indigo (#4b0082)
  • ivory (#fffff0)
  • khaki (#f0e68c)
  • lavender (#e6e6fa)
  • lavenderblush (#fff0f5)
  • lawngreen (#7cfc00)
  • lemonchiffon (#fffacd)
  • lightblue (#add8e6)
  • lightcoral (#f08080)
  • lightcyan (#e0ffff)
  • lightgoldenrodyellow (#fafad2)
  • lightgray (#d3d3d3)
  • lightgreen (#90ee90)
  • lightgrey (#d3d3d3)
  • lightpink (#ffb6c1)
  • lightsalmon (#ffa07a)
  • lightseagreen (#20b2aa)
  • lightskyblue (#87cefa)
  • lightslategray (#778899)
  • lightslategrey (#778899)
  • lightsteelblue (#b0c4de)
  • lightyellow (#ffffe0)
  • lime (#00ff00)
  • limegreen (#32cd32)
  • linen (#faf0e6)
  • magenta (#ff00ff)
  • maroon (#800000)
  • mediumaquamarine (#66cdaa)
  • mediumblue (#0000cd)
  • mediumorchid (#ba55d3)
  • mediumpurple (#9370db)
  • mediumseagreen (#3cb371)
  • mediumslateblue (#7b68ee)
  • mediumspringgreen (#00fa9a)
  • mediumturquoise (#48d1cc)
  • mediumvioletred (#c71585)
  • midnightblue (#191970)
  • mintcream (#f5fffa)
  • mistyrose (#ffe4e1)
  • moccasin (#ffe4b5)
  • navajowhite (#ffdead)
  • navy (#000080)
  • oldlace (#fdf5e6)
  • olive (#808000)
  • olivedrab (#6b8e23)
  • orange (#ffa500)
  • orangered (#ff4500)
  • orchid (#da70d6)
  • palegoldenrod (#eee8aa)
  • palegreen (#98fb98)
  • paleturquoise (#afeeee)
  • palevioletred (#db7093)
  • papayawhip (#ffefd5)
  • peachpuff (#ffdab9)
  • peru (#cd853f)
  • pink (#ffc0cb)
  • plum (#dda0dd)
  • powderblue (#b0e0e6)
  • purple (#800080)
  • rebeccapurple (#663399)
  • red (#ff0000)
  • rosybrown (#bc8f8f)
  • royalblue (#4169e1)
  • saddlebrown (#8b4513)
  • salmon (#fa8072)
  • sandybrown (#f4a460)
  • seagreen (#2e8b57)
  • seashell (#fff5ee)
  • sienna (#a0522d)
  • silver (#c0c0c0)
  • skyblue (#87ceeb)
  • slateblue (#6a5acd)
  • slategray (#708090)
  • slategrey (#708090)
  • snow (#fffafa)
  • springgreen (#00ff7f)
  • steelblue (#4682b4)
  • tan (#d2b48c)
  • teal (#008080)
  • thistle (#d8bfd8)
  • tomato (#ff6347)
  • turquoise (#40e0d0)
  • violet (#ee82ee)
  • wheat (#f5deb3)
  • white (#ffffff)
  • whitesmoke (#f5f5f5)
  • yellow (#ffff00)
  • yellowgreen (#9acd32)

Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/communication-ios.html b/docs/communication-ios.html index 524884d9830..2712ed7e6c2 100644 --- a/docs/communication-ios.html +++ b/docs/communication-ios.html @@ -1,4 +1,4 @@ -Communication between native and React Native – React Native | A framework for building native apps using React

Communication between native and React Native #

Edit on GitHub

In Integrating with Existing Apps guide and Native UI Components guide we learn how to embed React Native in a native component and vice versa. When we mix native and React Native components, we'll eventually find a need to communicate between these two worlds. Some ways to achieve that have been already mentioned in other guides. This article summarizes available techniques.

Introduction #

React Native is inspired by React, so the basic idea of the information flow is similar. The flow in React is one-directional. We maintain a hierarchy of components, in which each component depends only on its parent and own internal state. We do this with properties: data is passed from a parent to its children in a top-down manner. If we have an ancestor component that rely on the state of its descendant, the recommended solution would be to pass down a callback that would be used by the descendant to update the ancestor.

The same concept applies to React Native. As long as we are building our application purely within the framework, we can drive our app with properties and callbacks. But, when we mix React Native and native components, we need some special, cross-language mechanisms that would allow us to pass information between them.

Properties #

Properties are the simplest way of cross-component communication. So we need a way to pass properties both from native to React Native, and from React Native to native.

Passing properties from native to React Native #

In order to embed a React Native view in a native component, we use RCTRootView. RCTRootView is a UIView that holds a React Native app. It also provides an interface between native side and the hosted app.

RCTRootView has an initializer that allows you to pass arbitrary properties down to the React Native app. The initialProperties parameter has to be an instance of NSDictionary. The dictionary is internally converted into a JSON object that the top-level JS component can reference.

NSArray *imageList = @[@"http://foo.com/bar1.png", +Communication between native and React Native – React Native | A framework for building native apps using React

Communication between native and React Native #

Edit on GitHub

In Integrating with Existing Apps guide and Native UI Components guide we learn how to embed React Native in a native component and vice versa. When we mix native and React Native components, we'll eventually find a need to communicate between these two worlds. Some ways to achieve that have been already mentioned in other guides. This article summarizes available techniques.

Introduction #

React Native is inspired by React, so the basic idea of the information flow is similar. The flow in React is one-directional. We maintain a hierarchy of components, in which each component depends only on its parent and own internal state. We do this with properties: data is passed from a parent to its children in a top-down manner. If we have an ancestor component that rely on the state of its descendant, the recommended solution would be to pass down a callback that would be used by the descendant to update the ancestor.

The same concept applies to React Native. As long as we are building our application purely within the framework, we can drive our app with properties and callbacks. But, when we mix React Native and native components, we need some special, cross-language mechanisms that would allow us to pass information between them.

Properties #

Properties are the simplest way of cross-component communication. So we need a way to pass properties both from native to React Native, and from React Native to native.

Passing properties from native to React Native #

In order to embed a React Native view in a native component, we use RCTRootView. RCTRootView is a UIView that holds a React Native app. It also provides an interface between native side and the hosted app.

RCTRootView has an initializer that allows you to pass arbitrary properties down to the React Native app. The initialProperties parameter has to be an instance of NSDictionary. The dictionary is internally converted into a JSON object that the top-level JS component can reference.

NSArray *imageList = @[@"http://foo.com/bar1.png", @"http://foo.com/bar2.png"]; NSDictionary *props = @{@"images" : imageList}; @@ -74,7 +74,7 @@ Making a dimension flexible in both JS and native leads to undefined behavior. F newFrame.size = rootView.intrinsicSize; rootView.frame = newFrame; -}

In the example we have a FlexibleSizeExampleView view that holds a root view. We create the root view, initialize it and set the delegate. The delegate will handle size updates. Then, we set the root view's size flexibility to RCTRootViewSizeFlexibilityHeight, which means that rootViewDidChangeIntrinsicSize: method will be called every time the React Native content changes its height. Finally, we set the root view's width and position. Note that we set there height as well, but it has no effect as we made the height RN-dependent.

You can checkout full source code of the example here.

It's fine to change root view's size flexibility mode dynamically. Changing flexibility mode of a root view will schedule a layout recalculation and the delegate rootViewDidChangeIntrinsicSize: method will be called once the content size is known.

Note: React Native layout calculation is performed on a special thread, while native UI view updates are done on the main thread. This may cause temporary UI inconsistencies between native and React Native. This is a known problem and our team is working on synchronizing UI updates coming from different sources.

Note: React Native does not perform any layout calculations until the root view becomes a subview of some other views. If you want to hide React Native view until its dimensions are known, add the root view as a subview and make it initially hidden (use UIView's hidden property). Then change its visibility in the delegate method.

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/datepickerandroid.html b/docs/datepickerandroid.html index 054e265e434..bf2202d018a 100644 --- a/docs/datepickerandroid.html +++ b/docs/datepickerandroid.html @@ -1,4 +1,4 @@ -DatePickerAndroid – React Native | A framework for building native apps using React

DatePickerAndroid #

Edit on GitHub

Opens the standard Android date picker dialog.

Example #

try { +DatePickerAndroid – React Native | A framework for building native apps using React

DatePickerAndroid #

Edit on GitHub

Opens the standard Android date picker dialog.

Example #

try { const {action, year, month, day} = await DatePickerAndroid.open({ // Use `new Date()` for current date. // May 25 2020. Month 0 is January. @@ -9,14 +9,14 @@ } } catch ({code, message}) { console.warn('Cannot open date picker', message); -}

Methods #

static open(options) #

Opens the standard Android date picker dialog.

The available keys for the options object are: +}

Methods #

static open(options) #

Opens the standard Android date picker dialog.

The available keys for the options object are: date (Date object or timestamp in milliseconds) - date to show by default minDate (Date or timestamp in milliseconds) - minimum date that can be selected * maxDate (Date object or timestamp in milliseconds) - minimum date that can be selected

Returns a Promise which will be invoked an object containing action, year, month (0-11), day if the user picked a date. If the user dismissed the dialog, the Promise will still be resolved with action being DatePickerAndroid.dismissedAction and all the other keys being undefined. Always check whether the action before reading the values.

Note the native date picker dialog has some UI glitches on Android 4 and lower -when using the minDate and maxDate options.

static dateSetAction() #

A date has been selected.

static dismissedAction() #

The dialog has been dismissed.

Examples #

Edit on GitHub
'use strict'; +when using the minDate and maxDate options.

static dateSetAction(0) #

A date has been selected.

static dismissedAction(0) #

The dialog has been dismissed.

Examples #

Edit on GitHub
'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -120,7 +120,7 @@ when using the minDate and maxDate options.

< }, }); -module.exports = DatePickerAndroidExample;
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/datepickerios.html b/docs/datepickerios.html index 81f7c73b294..f3b57d95069 100644 --- a/docs/datepickerios.html +++ b/docs/datepickerios.html @@ -1,4 +1,4 @@ -DatePickerIOS – React Native | A framework for building native apps using React

DatePickerIOS #

Edit on GitHub

Use DatePickerIOS to render a date/time picker (selector) on iOS. This is +DatePickerIOS – React Native | A framework for building native apps using React

DatePickerIOS #

Edit on GitHub

Use DatePickerIOS to render a date/time picker (selector) on iOS. This is a controlled component, so you must hook in to the onDateChange callback and update the date prop in order for the component to update, otherwise the user's change will be reverted immediately to reflect props.date as the @@ -6,7 +6,7 @@ source of truth.

Props

timeZoneOffsetInMinutes number #

Timezone offset in minutes.

By default, the date picker will use the device's timezone. With this parameter, it is possible to force a certain timezone offset. For -instance, to show times in Pacific Standard Time, pass -7 * 60.

Examples #

Edit on GitHub
'use strict'; +instance, to show times in Pacific Standard Time, pass -7 * 60.

Examples #

Edit on GitHub
'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -159,7 +159,7 @@ exports.examples : '500', fontSize: 14, }, -});
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/debugging.html b/docs/debugging.html index e6601ce9c66..2a1f94cc9fc 100644 --- a/docs/debugging.html +++ b/docs/debugging.html @@ -1,5 +1,5 @@ -Debugging – React Native | A framework for building native apps using React

Debugging #

Edit on GitHub

Debugging React Native Apps #

To access the in-app developer menu:

  1. On iOS shake the device or press control + ⌘ + z in the simulator.
  2. On Android shake the device or press hardware menu button (available on older devices and in most of the emulators, e.g. in genymotion you can press ⌘ + m or F2 to simulate hardware menu button click). You can also install Frappé, a tool for OS X, which allows you to emulate shaking of devices remotely. You can use ⌘ + Shift + R as a shortcut to trigger a shake from Frappé.

Hint

To disable the developer menu for production builds:

  1. For iOS open your project in Xcode and select ProductSchemeEdit Scheme... (or press ⌘ + <). Next, select Run from the menu on the left and change the Build Configuration to Release.
  2. For Android, by default, developer menu will be disabled in release builds done by gradle (e.g with gradle assembleRelease task). Although this behavior can be customized by passing proper value to ReactInstanceManager#setUseDeveloperSupport.

Android logging #

Run adb logcat *:S ReactNative:V ReactNativeJS:V in a terminal to see your Android app's logs.

Reload #

Selecting Reload (or pressing ⌘ + r in the iOS simulator) will reload the JavaScript that powers your application. If you have added new resources (such as an image to Images.xcassets on iOS or to res/drawable folder on Android) or modified any native code (Objective-C/Swift code on iOS or Java/C++ code on Android), you will need to re-build the app for the changes to take effect.

YellowBox/RedBox #

Using console.warn will display an on-screen log on a yellow background. Click on this warning to show more information about it full screen and/or dismiss the warning.

You can use console.error to display a full screen error on a red background.

By default, the warning box is enabled in __DEV__. Set the following flag to disable it:

console.disableYellowBox = true; -console.warn('YellowBox is disabled.');

Specific warnings can be ignored programmatically by setting the array:

console.ignoredYellowBox = ['Warning: ...'];

Strings in console.ignoredYellowBox can be a prefix of the warning that should be ignored.

Chrome Developer Tools #

To debug the JavaScript code in Chrome, select Debug JS Remotely from the developer menu. This will open a new tab at http://localhost:8081/debugger-ui.

In Chrome, press ⌘ + option + i or select ViewDeveloperDeveloper Tools to toggle the developer tools console. Enable Pause On Caught Exceptions for a better debugging experience.

To debug on a real device:

  1. On iOS - open the file RCTWebSocketExecutor.m and change localhost to the IP address of your computer. Shake the device to open the development menu with the option to start debugging.
  2. On Android, if you're running Android 5.0+ device connected via USB you can use adb command line tool to setup port forwarding from the device to your computer. For that run: adb reverse tcp:8081 tcp:8081 (see this link for help on adb command). Alternatively, you can open dev menu on the device and select Dev Settings, then update Debug server host for device setting to the IP address of your computer.

Custom JavaScript debugger #

To use a custom JavaScript debugger define the REACT_DEBUGGER environment variable to a command that will start your custom debugger. That variable will be read from the Packager process. If that environment variable is set, selecting Debug JS Remotely from the developer menu will execute that command instead of opening Chrome. The exact command to be executed is the contents of the REACT_DEBUGGER environment variable followed by the space separated paths of all project roots (e.g. If you set REACT_DEBUGGER="node /path/to/launchDebugger.js --port 2345 --type ReactNative" then the command "node /path/to/launchDebugger.js --port 2345 --type ReactNative /path/to/reactNative/app" will end up being executed). Custom debugger commands executed this way should be short-lived processes, and they shouldn't produce more than 200 kilobytes of output.

Live Reload #

This option allows for your JS changes to trigger automatic reload on the connected device/emulator. To enable this option:

  1. On iOS, select Enable Live Reload via the developer menu to have the application automatically reload when changes are made to the JavaScript.
  2. On Android, launch dev menu, go to Dev Settings and select Auto reload on JS change option

FPS (Frames per Second) Monitor #

On 0.5.0-rc and higher versions, you can enable a FPS graph overlay in the developers menu in order to help you debug performance problems.

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.

Debugging #

Edit on GitHub

Accessing the In-App Developer Menu #

You can access the developer menu by shaking your device or by selecting "Shake Gesture" inside the Hardware menu in the iOS Simulator. You can also use the Command + D keyboard shortcut when your app is running in the iPhone Simulator, or Command + M when running in an Android emulator.

The Developer Menu is disabled in release (production) builds.

Reloading JavaScript #

Instead of recompiling your app every time you make a change, you can reload your app's JavaScript code instantly. To do so, select "Reload" from the Developer Menu. You can also press Command + R in the iOS Simulator, or press R twice on Android emulators.

If the Command + R keyboard shortcut does not seem to reload the iOS Simulator, go to the Hardware menu, select Keyboard, and make sure that "Connect Hardware Keyboard" is checked.

Automatic reloading #

You can speed up your development times by having your app reload automatically any time your code changes. Automatic reloading can be enabled by selecting "Enable Live Reload" from the Developer Menu.

You may even go a step further and keep your app running as new versions of your files are injected into the JavaScript bundle automatically by enabling Hot Reloading from the Developer Menu. This will allow you to persist the app's state through reloads.

There are some instances where hot reloading cannot be implemented perfectly. If you run into any issues, use a full reload to reset your app.

You will need to rebuild your app for changes to take effect in certain situations:

  • You have added new resources to your native app's bundle, such as an image in Images.xcassets on iOS or the res/drawable folder on Android.
  • You have modified native code (Objective-C/Swift on iOS or Java/C++ on Android).

In-app Errors and Warnings #

Errors and warnings are displayed inside your app in development builds.

Errors #

In-app errors are displayed in a full screen alert with a red background inside your app. This screen is known as a RedBox. You can use console.error() to manually trigger one.

Warnings #

Warnings will be displayed on screen with a yellow background. These alerts are known as YellowBoxes. Click on the alerts to show more information or to dismiss them.

As with a RedBox, you can use console.warn() to trigger a YellowBox.

YellowBoxes can be disabled during development by using console.disableYellowBox = true;. Specific warnings can be ignored programmatically by setting an array of prefixes that should be ignored: console.ignoredYellowBox = ['Warning: ...'];

RedBoxes and YellowBoxes are automatically disabled in release (production) builds.

Accessing console logs #

You can display the console logs for an iOS or Android app by using the following commands in a terminal while the app is running:

$ react-native log-ios +$ react-native log-android

You may also access these through Debug → Open System Log... in the iOS Simulator or by running adb logcat *:S ReactNative:V ReactNativeJS:V in a terminal while an Android app is running on a device or emulator.

Chrome Developer Tools #

To debug the JavaScript code in Chrome, select "Debug JS Remotely" from the Developer Menu. This will open a new tab at http://localhost:8081/debugger-ui.

Select Tools → Developer Tools from the Chrome Menu to open the Developer Tools. You may also access the DevTools using keyboard shortcuts (Command + Option + I on Mac, Ctrl + Shift + I on Windows). You may also want to enable Pause On Caught Exceptions for a better debugging experience.

It is currently not possible to use the "React" tab in the Chrome Developer Tools to inspect app widgets. You can use Nuclide's "React Native Inspector" as a workaround.

Debugging on a device with Chrome Developer Tools #

On iOS devices, open the file RCTWebSocketExecutor.m and change "localhost" to the IP address of your computer, then select "Debug JS Remotely" from the Developer Menu.

On Android 5.0+ devices connected via USB, you can use the adb command line tool to setup port forwarding from the device to your computer:

adb reverse tcp:8081 tcp:8081

Alternatively, select "Dev Settings" from the Developer Menu, then update the "Debug server host for device" setting to match the IP address of your computer.

If you run into any issues, it may be possible that one of your Chrome extensions is interacting in unexpected ways with the debugger. Try disabling all of your extensions and re-enabling them one-by-one until you find the problematic extension.

Debugging using a custom JavaScript debugger #

To use a custom JavaScript debugger in place of Chrome Developer Tools, set the REACT_DEBUGGER environment variable to a command that will start your custom debugger. You can then select "Debug JS Remotely" from the Developer Menu to start debugging.

The debugger will receive a list of all project roots, separated by a space. For example, if you set REACT_DEBUGGER="node /path/to/launchDebugger.js --port 2345 --type ReactNative", then the command node /path/to/launchDebugger.js --port 2345 --type ReactNative /path/to/reactNative/app will be used to start your debugger.

Custom debugger commands executed this way should be short-lived processes, and they shouldn't produce more than 200 kilobytes of output.

Performance Monitor #

You can enable a performance overlay to help you debug performance problems by selecting "Perf Monitor" in the Developer Menu.

Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/dimensions.html b/docs/dimensions.html index 4413cde5f1d..3242113efd8 100644 --- a/docs/dimensions.html +++ b/docs/dimensions.html @@ -1,11 +1,11 @@ -Dimensions – React Native | A framework for building native apps using React

Dimensions #

Edit on GitHub

Methods #

static set(dims) #

This should only be called from native code by sending the -didUpdateDimensions event.

@param {object} dims Simple string-keyed object of dimensions to set

static get(dim) #

Initial dimensions are set before runApplication is called so they should +Dimensions – React Native | A framework for building native apps using React

Dimensions #

Edit on GitHub

Methods #

static set(dims) #

This should only be called from native code by sending the +didUpdateDimensions event.

@param {object} dims Simple string-keyed object of dimensions to set

static get(dim) #

Initial dimensions are set before runApplication is called so they should be available before any other require's are run, but may be updated later.

Note: Although dimensions are available immediately, they may change (e.g due to device rotation) so any rendering logic or styles that depend on these constants should try to call this function on every render, rather than caching the value (for example, using inline styles rather than setting a value in a StyleSheet).

Example: var {height, width} = Dimensions.get('window');

@param {string} dim Name of dimension as defined when calling set. -@returns {Object?} Value for the dimension.

© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/direct-manipulation.html b/docs/direct-manipulation.html index 66104847337..9a34c8f0c00 100644 --- a/docs/direct-manipulation.html +++ b/docs/direct-manipulation.html @@ -1,4 +1,4 @@ -Direct Manipulation – React Native | A framework for building native apps using React

Direct Manipulation #

Edit on GitHub

It is sometimes necessary to make changes directly to a component +Direct Manipulation – React Native | A framework for building native apps using React

Direct Manipulation #

Edit on GitHub

It is sometimes necessary to make changes directly to a component without using state/props to trigger a re-render of the entire subtree. When using React in the browser for example, you sometimes need to directly modify a DOM node, and the same is true for views in mobile @@ -12,7 +12,7 @@ within your React components, which makes your code more difficult to reason about. Before you use it, try to solve your problem with setState and shouldComponentUpdate.

setNativeProps with TouchableOpacity #

TouchableOpacity uses setNativeProps internally to update the opacity of its child -component:

setOpacityTo: function(value) { +component:

setOpacityTo(value) { // Redacted: animation related code this.refs[CHILD_REF].setNativeProps({ opacity: value @@ -25,9 +25,10 @@ any knowledge of that fact or requiring any changes to its implementation:

/View> </TouchableOpacity>

Let's imagine that setNativeProps was not available. One way that we might implement it with that constraint is to store the opacity value -in the state, then update that value whenever onPress is fired:

getInitialState() { - return { myButtonOpacity: 1, } -}, +in the state, then update that value whenever onPress is fired:

constructor(props) { + super(props); + this.state = { myButtonOpacity: 1, }; +} render() { return ( @@ -49,25 +50,25 @@ you will notice that it is a wrapper around RCTUIManager.updateView this is the exact same function call that results from re-rendering - see receiveComponent in ReactNativeBaseComponent.js.

Composite components and setNativeProps #

Composite components are not backed by a native view, so you cannot call -setNativeProps on them. Consider this example:

var MyButton = React.createClass({ +setNativeProps on them. Consider this example:

class MyButton extends React.Component { render() { return ( <View> <Text>{this.props.label}</Text> </View> ) - }, -}); + } +} -var App = React.createClass({ +class App extends React.Component { render() { return ( <TouchableOpacity> <MyButton label="Press me!" /> </TouchableOpacity> ) - }, -});

Run this example

If you run this you will immediately see this error: Touchable child + } +}

Run this example

If you run this you will immediately see this error: Touchable child must either be native or forward setNativeProps to a native component. This occurs because MyButton isn't directly backed by a native view whose opacity should be set. You can think about it like this: if you @@ -77,10 +78,10 @@ pass the style prop down to a child, unless you are wrapping a native component. Similarly, we are going to forward setNativeProps to a native-backed child component.

Forward setNativeProps to a child #

All we need to do is provide a setNativeProps method on our component that calls setNativeProps on the appropriate child with the given -arguments.

var MyButton = React.createClass({ +arguments.

class MyButton extends React.Component { setNativeProps(nativeProps) { this._root.setNativeProps(nativeProps); - }, + } render() { return ( @@ -88,8 +89,8 @@ arguments.

>{this.props.label}</Text> </View> ) - }, -});

Run this example

You can now use MyButton inside of TouchableOpacity! A sidenote for + } +}

Run this example

You can now use MyButton inside of TouchableOpacity! A sidenote for clarity: we used the ref callback syntax here, rather than the traditional string-based ref.

You may have noticed that we passed all of the props down to the child view using {...this.props}. The reason for this is that TouchableOpacity is actually a composite component, and so in addition @@ -104,10 +105,15 @@ characters when the bufferDelay is low and the user types very quickly. Some developers prefer to skip this prop entirely and instead use setNativeProps to directly manipulate the TextInput value when necessary. For example, the following code demonstrates clearing the -input when you tap a button:

var App = React.createClass({ +input when you tap a button:

class App extends React.Component { + constructor(props) { + super(props); + this.clearText = this.clearText.bind(this); + } + clearText() { this._textInput.setNativeProps({text: ''}); - }, + } render() { return ( @@ -120,7 +126,7 @@ input when you tap a button:

/View> ); } -});

Run this example

Avoiding conflicts with the render function #

If you update a property that is also managed by the render function, +}

Run this example

Avoiding conflicts with the render function #

If you update a property that is also managed by the render function, you might end up with some unpredictable and confusing bugs because anytime the component re-renders and that property changes, whatever value was previously set from setNativeProps will be completely @@ -130,7 +136,7 @@ the jerky animation each 250ms when setState triggers a re-render.< shouldComponentUpdate you can avoid the unnecessary overhead involved in reconciling unchanged component subtrees, to the point where it may be performant enough to -use setState instead of setNativeProps.

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/drawerlayoutandroid.html b/docs/drawerlayoutandroid.html index ebdc56c6af9..ffebfafdbc7 100644 --- a/docs/drawerlayoutandroid.html +++ b/docs/drawerlayoutandroid.html @@ -1,4 +1,4 @@ -DrawerLayoutAndroid – React Native | A framework for building native apps using React

DrawerLayoutAndroid #

Edit on GitHub

React component that wraps the platform DrawerLayout (Android only). The +DrawerLayoutAndroid – React Native | A framework for building native apps using React

DrawerLayoutAndroid #

Edit on GitHub

React component that wraps the platform DrawerLayout (Android only). The Drawer (typically used for navigation) is rendered with renderNavigationView and direct children are the main view (where your content goes). The navigation view is initially not visible on the screen, but can be pulled in from the @@ -37,7 +37,7 @@ from the edge of the window.

renderNavigationView function #

The navigation view that will be rendered to the side of the screen and can be pulled in.

statusBarBackgroundColor color #

Make the drawer take the entire screen and draw the background of the status bar to allow it to open over the status bar. It will only have an -effect on API 21+.

Methods #

openDrawer() #

Opens the drawer.

closeDrawer() #

Closes the drawer.

© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/embedded-app-android.html b/docs/embedded-app-android.html deleted file mode 100644 index 501a8630462..00000000000 --- a/docs/embedded-app-android.html +++ /dev/null @@ -1,118 +0,0 @@ -Integrating with Existing Apps – React Native | A framework for building native apps using React

Integrating with Existing Apps #

Edit on GitHub

Since React makes no assumptions about the rest of your technology stack, it's easily embeddable within an existing non-React Native app.

Requirements #

  • an existing, gradle-based Android app
  • Node.js, see Getting Started for setup instructions

Prepare your app #

In your app's build.gradle file add the React Native dependency:

compile "com.facebook.react:react-native:+" // From node_modules

In your project's build.gradle file add an entry for the local React Native maven directory:

allprojects { - repositories { - ... - maven { - // All of React Native (JS, Android binaries) is installed from npm - url "$rootDir/node_modules/react-native/android" - } - } - ... -}

Next, make sure you have the Internet permission in your AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

This is only really used in dev mode when reloading JavaScript from the development server, so you can strip this in release builds if you need to.

Add native code #

You need to add some native code in order to start the React Native runtime and get it to render something. To do this, we're going to create an Activity that creates a ReactRootView, starts a React application inside it and sets it as the main content view.

public class MyReactActivity extends Activity implements DefaultHardwareBackBtnHandler { - private ReactRootView mReactRootView; - private ReactInstanceManager mReactInstanceManager; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - mReactRootView = new ReactRootView(this); - mReactInstanceManager = ReactInstanceManager.builder() - .setApplication(getApplication()) - .setBundleAssetName("index.android.bundle") - .setJSMainModuleName("index.android") - .addPackage(new MainReactPackage()) - .setUseDeveloperSupport(BuildConfig.DEBUG) - .setInitialLifecycleState(LifecycleState.RESUMED) - .build(); - mReactRootView.startReactApplication(mReactInstanceManager, "MyAwesomeApp", null); - - setContentView(mReactRootView); - } - - @Override - public void invokeDefaultOnBackPressed() { - super.onBackPressed(); - } -}

Next, we need to pass some activity lifecycle callbacks down to the ReactInstanceManager:

@Override -protected void onPause() { - super.onPause(); - - if (mReactInstanceManager != null) { - mReactInstanceManager.onPause(); - } -} - -@Override -protected void onResume() { - super.onResume(); - - if (mReactInstanceManager != null) { - mReactInstanceManager.onResume(this, this); - } -}

We also need to pass back button events to React Native:

@Override - public void onBackPressed() { - if (mReactInstanceManager != null) { - mReactInstanceManager.onBackPressed(); - } else { - super.onBackPressed(); - } -}

This allows JavaScript to control what happens when the user presses the hardware back button (e.g. to implement navigation). When JavaScript doesn't handle a back press, your invokeDefaultOnBackPressed method will be called. By default this simply finishes your Activity. -Finally, we need to hook up the dev menu. By default, this is activated by (rage) shaking the device, but this is not very useful in emulators. So we make it show when you press the hardware menu button:

@Override -public boolean onKeyUp(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_MENU && mReactInstanceManager != null) { - mReactInstanceManager.showDevOptionsDialog(); - return true; - } - return super.onKeyUp(keyCode, event); -}

That's it, your activity is ready to run some JavaScript code.

Add JS to your app #

In your app's root folder, run:

$ npm init -$ npm install --save react-native -$ curl -o .flowconfig https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig

This creates a node module for your app and adds the react-native npm dependency. Now open the newly created package.json file and add this under scripts:

"start": "node node_modules/react-native/local-cli/cli.js start"

Copy & paste the following code to index.android.js in your root folder — it's a barebones React Native app:

'use strict'; - -import React from 'react'; -import { - AppRegistry, - StyleSheet, - Text, - View -} from 'react-native'; - -class MyAwesomeApp extends React.Component { - render() { - return ( - <View style={styles.container}> - <Text style={styles.hello}>Hello, World</Text> - </View> - ) - } -} -var styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - }, - hello: { - fontSize: 20, - textAlign: 'center', - margin: 10, - }, -}); - -AppRegistry.registerComponent('MyAwesomeApp', () => MyAwesomeApp);

Run your app #

To run your app, you need to first start the development server. To do this, simply run the following command in your root folder:

$ npm start

Now build and run your Android app as normal (e.g. ./gradlew installDebug). Once you reach your React-powered activity inside the app, it should load the JavaScript code from the development server and display:

Screenshot

Sharing a ReactInstance across multiple Activities / Fragments in your app #

You can have multiple Activities or Fragments that use the same ReactInstanceManager. You'll want to make your own "ReactFragment" or "ReactActivity" and have a singleton "holder" that holds a ReactInstanceManager. When you need the ReactInstanceManager / hook up the ReactInstanceManager to the lifecycle of those Activities or Fragments, use the one provided by the singleton.

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/embedded-app-ios.html b/docs/embedded-app-ios.html deleted file mode 100644 index e0414f5a075..00000000000 --- a/docs/embedded-app-ios.html +++ /dev/null @@ -1,104 +0,0 @@ -Integrating with Existing Apps – React Native | A framework for building native apps using React

Integrating with Existing Apps #

Edit on GitHub

Since React makes no assumptions about the rest of your technology stack – it’s commonly noted as simply the V in MVC – it’s easily embeddable within an existing non-React Native app. In fact, it integrates with other best practice community tools like CocoaPods.

Requirements #

  • CocoaPodsgem install cocoapods
  • Node.js
    • Install nvm with its setup instructions here. Then run nvm install node && nvm alias default node, which installs the latest version of Node.js and sets up your terminal so you can run it by typing node. With nvm you can install multiple versions of Node.js and easily switch between them.
  • Install the react-native package from npm by running the following command in the root directory of your project:
    • npm install react-native

At this point you should have the React Native package installed under a directory named node_modules as a sibling to your .xcodeproj file.

Install React Native Using CocoaPods #

CocoaPods is a package management tool for iOS/Mac development. We need to use it to download React Native. If you haven't installed CocoaPods yet, check out this tutorial.

When you are ready to work with CocoaPods, add the following lines to Podfile. If you don't have one, then create it under the root directory of your project.

# Depending on how your project is organized, your node_modules directory may be -# somewhere else; tell CocoaPods where you've installed react-native from npm -pod 'React', :path => './node_modules/react-native', :subspecs => [ - 'Core', - 'RCTImage', - 'RCTNetwork', - 'RCTText', - 'RCTWebSocket', - # Add any other subspecs you want to use in your project -]

Remember to install all subspecs you need. The <Text> element cannot be used without the RCTText subspec, for example.

Then install your pods:

$ pod install

Create Your React Native App #

There are two pieces you’ll need to set up:

  1. The root JavaScript file that will contain your actual React Native app and other components
  2. Wrapper Objective-C code that will load up your script and create a RCTRootView to display and manage your React Native components

First, create a directory for your app’s React code and create a simple index.ios.js file:

$ mkdir ReactComponent -$ touch ReactComponent/index.ios.js

Copy & paste following starter code for index.ios.js – it’s a barebones React Native app:

'use strict'; - -import React from 'react'; -import { - AppRegistry, - StyleSheet, - Text, - View -} from 'react-native'; - -var styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: 'red' - } -}); - -class SimpleApp extends React.Component { - render() { - return ( - <View style={styles.container}> - <Text>This is a simple application.</Text> - </View> - ) - } -} - -AppRegistry.registerComponent('SimpleApp', () => SimpleApp);

SimpleApp will be your module name, which will be used later on.

Add Container View To Your App #

You should now add a container view for the React Native component. It can be any UIView in your app.

Container view example

However, let's subclass UIView for the sake of clean code. Let's name it ReactView. Open up Yourproject.xcworkspace and create a new class ReactView (You can name it whatever you like :)).

// ReactView.h - -#import <UIKit/UIKit.h> -@interface ReactView : UIView -@end

In a view controller that wants to manage this view, go ahead and add an outlet and wire it up:

// ViewController.m - -@interface ViewController () -@property (weak, nonatomic) IBOutlet ReactView *reactView; -@end

NOTE For Swift apps there is no need for that.

Here I disabled AutoLayout for simplicity. In real production world, you should turn on AutoLayout and setup constraints by yourself.

Add RCTRootView To Container View #

Ready for the most interesting part? Now we shall create the RCTRootView, where your React Native app lives.

In ReactView.m, we need to first initiate RCTRootView with the URI of your index.ios.bundle. index.ios.bundle will be created by packager and served by React Native server, which will be discussed later on.

NSURL *jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios"]; -// For production use, this `NSURL` could instead point to a pre-bundled file on disk: -// -// NSURL *jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; -// -// To generate that file, run the curl command and add the output to your main Xcode build target: -// -// curl http://localhost:8081/index.ios.bundle -o main.jsbundle -RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation - moduleName: @"SimpleApp" - initialProperties:nil - launchOptions:nil];

Then add it as a subview of the ReactView.

[self addSubview:rootView]; -rootView.frame = self.bounds;

Swift apps #

Add the following to ReactView.swift file:

import UIKit -import React - -class ReactView: UIView { - - let rootView: RCTRootView = RCTRootView(bundleURL: NSURL(string: "http://localhost:8081/index.ios.bundle?platform=ios"), - moduleName: "SimpleApp", initialProperties: nil, launchOptions: nil) - - override func layoutSubviews() { - super.layoutSubviews() - - loadReact() - } - - func loadReact () { - addSubview(rootView) - rootView.frame = self.bounds - } -}

And then make sure your view is added in a ViewContainer or story board file.

Start Development Server #

In root directory, we need to start React Native development server.

(JS_DIR=`pwd`/ReactComponent; cd node_modules/react-native; npm run start -- --root $JS_DIR)

This command will start up a React Native development server within our CocoaPods dependency to build our bundled script. The --root option indicates the root of your React Native apps – this will be our ReactComponent directory containing the single index.ios.js file. This running server will package up the index.ios.bundle file accessible via http://localhost:8081/index.ios.bundle.

Update App Transport Security #

On iOS 9 and above the app won't be a able to connect over http to localhost unless specifically told so. See this thread for alternatives and instructions: http://stackoverflow.com/questions/31254725/transport-security-has-blocked-a-cleartext-http.

It is recommended that you add an App Transport Security exception for localhost in your app's Info.plist file:

<key>NSAppTransportSecurity</key> -<dict> - <key>NSExceptionDomains</key> - <dict> - <key>localhost</key> - <dict> - <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> - <true/> - </dict> - </dict> -</dict>

If you don't do this, you will see the error - Could not connect to development server. when connecting to your server over http.

Compile And Run #

Now compile and run your app. You shall now see your React Native app running inside of the ReactView.

Example

Live reload and all of the debugging tools will work from the simulator. Just make sure that DEBUG=1 is set under Build Settings -> Preprocessor Macros. If you're using Cocoapods and a custom configuration (that is, not "Debug"), make sure you've specified it to be a debug configuration using the xcodeproj setting in your Podfile. Also make sure you've got a simple React component totally encapsulated behind an Objective-C UIView subclass.

Conclusion #

So under the hood, when RCTRootView is initialized, it will try to download, parse and run the bundle file from React Native development server. This means all you need to do is to implement your own container view or view controller for the RCTRootView – the RCTRootView ingests your bundled JS and renders your React components. Bravo!

You can checkout full source code of a sample application here.

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/flexbox.html b/docs/flexbox.html index a72b2bf754a..b20b55ba33b 100644 --- a/docs/flexbox.html +++ b/docs/flexbox.html @@ -1,4 +1,64 @@ -Flexbox – React Native | A framework for building native apps using React

Flexbox #

Edit on GitHub

Props #

alignItems enum('flex-start', 'flex-end', 'center', 'stretch') #

alignSelf enum('auto', 'flex-start', 'flex-end', 'center', 'stretch') #

borderBottomWidth number #

borderLeftWidth number #

borderRightWidth number #

borderTopWidth number #

borderWidth number #

bottom number #

flex number #

flexDirection enum('row', 'column') #

flexWrap enum('wrap', 'nowrap') #

height number #

justifyContent enum('flex-start', 'flex-end', 'center', 'space-between', 'space-around') #

left number #

margin number #

marginBottom number #

marginHorizontal number #

marginLeft number #

marginRight number #

marginTop number #

marginVertical number #

padding number #

paddingBottom number #

paddingHorizontal number #

paddingLeft number #

paddingRight number #

paddingTop number #

paddingVertical number #

position enum('absolute', 'relative') #

right number #

top number #

width number #

© 2016 Facebook Inc.

Layout with Flexbox #

Edit on GitHub

A component can specify the layout of its children using the flexbox algorithm. Flexbox is designed to provide a consistent layout on different screen sizes.

You will normally use a combination of flexDirection, alignItems, and justifyContent to achieve the right layout.

Flexbox works the same way in React Native as it does in CSS on the web, with a few exceptions. The defaults are different, with flexDirection defaulting to column instead of row, and alignItems defaulting to stretch instead of flex-start, and the flex parameter only supports a single number.

Flex Direction #

Adding flexDirection to a component's style determines the primary axis of its layout. Should the children be organized horizontally (row) or vertically (column)? The default is column.

import React, { Component } from 'react'; +import { AppRegistry, View } from 'react-native'; + +class FlexDirectionBasics extends Component { + render() { + return ( + // Try setting `flexDirection` to `column`. + <View style={{flex: 1, flexDirection: 'row'}}> + <View style={{width: 50, height: 50, backgroundColor: 'powderblue'}} /> + <View style={{width: 50, height: 50, backgroundColor: 'skyblue'}} /> + <View style={{width: 50, height: 50, backgroundColor: 'steelblue'}} /> + </View> + ); + } +}; + +AppRegistry.registerComponent('AwesomeProject', () => FlexDirectionBasics);

Justify Content #

Adding justifyContent to a component's style determines the distribution of children along the primary axis. Should children be distributed at the start, the center, the end, or spaced evenly? Available options are flex-start, center, flex-end, space-around, and space-between.

import React, { Component } from 'react'; +import { AppRegistry, View } from 'react-native'; + +class JustifyContentBasics extends Component { + render() { + return ( + // Try setting `justifyContent` to `center`. + // Try setting `flexDirection` to `row`. + <View style={{ + flex: 1, + flexDirection: 'column', + justifyContent: 'space-between', + }}> + <View style={{width: 50, height: 50, backgroundColor: 'powderblue'}} /> + <View style={{width: 50, height: 50, backgroundColor: 'skyblue'}} /> + <View style={{width: 50, height: 50, backgroundColor: 'steelblue'}} /> + </View> + ); + } +}; + +AppRegistry.registerComponent('AwesomeProject', () => JustifyContentBasics);

Align Items #

Adding alignItems to a component's style determines the alignment of children along the secondary axis (if the primary axis is row, then the secondary is column, and vice versa). Should children be aligned at the start, the center, the end, or stretched to fill? Available options are flex-start, center, flex-end, and stretch.

For stretch to have an effect, children must not have a fixed dimension along the secondary axis. In the following example, setting alignItems: stretch does nothing until the width: 50 is removed from the children.

import React, { Component } from 'react'; +import { AppRegistry, View } from 'react-native'; + +class AlignItemsBasics { + render() { + return ( + // Try setting `alignItems` to 'flex-start' + // Try setting `justifyContent` to `flex-end`. + // Try setting `flexDirection` to `row`. + <View style={{ + flex: 1, + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + }}> + <View style={{width: 50, height: 50, backgroundColor: 'powderblue'}} /> + <View style={{width: 50, height: 50, backgroundColor: 'skyblue'}} /> + <View style={{width: 50, height: 50, backgroundColor: 'steelblue'}} /> + </View> + ); + } +}; + +AppRegistry.registerComponent('AwesomeProject', () => AlignItemsBasics);

Going Deeper #

We've covered the basics, but there are many other styles you may need for layouts. The full list of props that control layout is documented here.

We're getting close to being able to build a real application. One thing we are still missing is a way to take user input, so let's move on to learn how to handle text input with the TextInput component.

Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/geolocation.html b/docs/geolocation.html index 28db2b7e9f4..1c137b0e2ee 100644 --- a/docs/geolocation.html +++ b/docs/geolocation.html @@ -1,12 +1,12 @@ -Geolocation – React Native | A framework for building native apps using React

Geolocation #

Edit on GitHub

The Geolocation API follows the web spec: +Geolocation – React Native | A framework for building native apps using React

Geolocation #

Edit on GitHub

The Geolocation API follows the web spec: https://developer.mozilla.org/en-US/docs/Web/API/Geolocation

iOS #

You need to include the NSLocationWhenInUseUsageDescription key in Info.plist to enable geolocation. Geolocation is enabled by default when you create a project with react-native init.

Android #

To request access to location, you need to add the following line to your -app's AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Methods #

static getCurrentPosition(geo_success, geo_error?, geo_options?) #

Invokes the success callback once with the latest location info. Supported +app's AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Methods #

static getCurrentPosition(geo_success, geo_error?, geo_options?) #

Invokes the success callback once with the latest location info. Supported options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool) On Android, this can return almost immediately if the location is cached or -request an update, which might take a while.

static watchPosition(success, error?, options?) #

Invokes the success callback whenever the location changes. Supported -options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool), distanceFilter(m)

static clearWatch(watchID) #

static stopObserving() #

Examples #

Edit on GitHub
/* eslint no-console: 0 */ +request an update, which might take a while.

static watchPosition(success, error?, options?) #

Invokes the success callback whenever the location changes. Supported +options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool), distanceFilter(m)

static clearWatch(watchID) #

static stopObserving(0) #

Examples #

Edit on GitHub
/* eslint no-console: 0 */ 'use strict'; @@ -80,7 +80,7 @@ exports.examples : { fontWeight: '500', }, -});
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/gesture-responder-system.html b/docs/gesture-responder-system.html index 926cd04149d..e0c2ab984a7 100644 --- a/docs/gesture-responder-system.html +++ b/docs/gesture-responder-system.html @@ -1,4 +1,4 @@ -Gesture Responder System – React Native | A framework for building native apps using React

Gesture Responder System #

Edit on GitHub

Gesture recognition on mobile devices is much more complicated than web. A touch can go through several phases as the app determines what the user's intention is. For example, the app needs to determine if the touch is scrolling, sliding on a widget, or tapping. This can even change during the duration of a touch. There can also be multiple simultaneous touches.

The touch responder system is needed to allow components to negotiate these touch interactions without any additional knowledge about their parent or child components. This system is implemented in ResponderEventPlugin.js, which contains further details and documentation.

Best Practices #

Users can feel huge differences in the usability of web apps vs. native, and this is one of the big causes. Every action should have the following attributes:

  • Feedback/highlighting- show the user what is handling their touch, and what will happen when they release the gesture
  • Cancel-ability- when making an action, the user should be able to abort it mid-touch by dragging their finger away

These features make users more comfortable while using an app, because it allows people to experiment and interact without fear of making mistakes.

TouchableHighlight and Touchable* #

The responder system can be complicated to use. So we have provided an abstract Touchable implementation for things that should be "tappable". This uses the responder system and allows you to easily configure tap interactions declaratively. Use TouchableHighlight anywhere where you would use a button or link on web.

Responder Lifecycle #

A view can become the touch responder by implementing the correct negotiation methods. There are two methods to ask the view if it wants to become responder:

  • View.props.onStartShouldSetResponder: (evt) => true, - Does this view want to become responder on the start of a touch?
  • View.props.onMoveShouldSetResponder: (evt) => true, - Called for every touch move on the View when it is not the responder: does this view want to "claim" touch responsiveness?

If the View returns true and attempts to become the responder, one of the following will happen:

  • View.props.onResponderGrant: (evt) => {} - The View is now responding for touch events. This is the time to highlight and show the user what is happening
  • View.props.onResponderReject: (evt) => {} - Something else is the responder right now and will not release it

If the view is responding, the following handlers can be called:

  • View.props.onResponderMove: (evt) => {} - The user is moving their finger
  • View.props.onResponderRelease: (evt) => {} - Fired at the end of the touch, ie "touchUp"
  • View.props.onResponderTerminationRequest: (evt) => true - Something else wants to become responder. Should this view release the responder? Returning true allows release
  • View.props.onResponderTerminate: (evt) => {} - The responder has been taken from the View. Might be taken by other views after a call to onResponderTerminationRequest, or might be taken by the OS without asking (happens with control center/ notification center on iOS)

evt is a synthetic touch event with the following form:

  • nativeEvent
    • changedTouches - Array of all touch events that have changed since the last event
    • identifier - The ID of the touch
    • locationX - The X position of the touch, relative to the element
    • locationY - The Y position of the touch, relative to the element
    • pageX - The X position of the touch, relative to the root element
    • pageY - The Y position of the touch, relative to the root element
    • target - The node id of the element receiving the touch event
    • timestamp - A time identifier for the touch, useful for velocity calculation
    • touches - Array of all current touches on the screen

Capture ShouldSet Handlers #

onStartShouldSetResponder and onMoveShouldSetResponder are called with a bubbling pattern, where the deepest node is called first. That means that the deepest component will become responder when multiple Views return true for *ShouldSetResponder handlers. This is desirable in most cases, because it makes sure all controls and buttons are usable.

However, sometimes a parent will want to make sure that it becomes responder. This can be handled by using the capture phase. Before the responder system bubbles up from the deepest component, it will do a capture phase, firing on*ShouldSetResponderCapture. So if a parent View wants to prevent the child from becoming responder on a touch start, it should have a onStartShouldSetResponderCapture handler which returns true.

  • View.props.onStartShouldSetResponderCapture: (evt) => true,
  • View.props.onMoveShouldSetResponderCapture: (evt) => true,

PanResponder #

For higher-level gesture interpretation, check out PanResponder.

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.

Gesture Responder System #

Edit on GitHub

Gesture recognition on mobile devices is much more complicated than web. A touch can go through several phases as the app determines what the user's intention is. For example, the app needs to determine if the touch is scrolling, sliding on a widget, or tapping. This can even change during the duration of a touch. There can also be multiple simultaneous touches.

The touch responder system is needed to allow components to negotiate these touch interactions without any additional knowledge about their parent or child components. This system is implemented in ResponderEventPlugin.js, which contains further details and documentation.

Best Practices #

Users can feel huge differences in the usability of web apps vs. native, and this is one of the big causes. Every action should have the following attributes:

  • Feedback/highlighting- show the user what is handling their touch, and what will happen when they release the gesture
  • Cancel-ability- when making an action, the user should be able to abort it mid-touch by dragging their finger away

These features make users more comfortable while using an app, because it allows people to experiment and interact without fear of making mistakes.

TouchableHighlight and Touchable* #

The responder system can be complicated to use. So we have provided an abstract Touchable implementation for things that should be "tappable". This uses the responder system and allows you to easily configure tap interactions declaratively. Use TouchableHighlight anywhere where you would use a button or link on web.

Responder Lifecycle #

A view can become the touch responder by implementing the correct negotiation methods. There are two methods to ask the view if it wants to become responder:

  • View.props.onStartShouldSetResponder: (evt) => true, - Does this view want to become responder on the start of a touch?
  • View.props.onMoveShouldSetResponder: (evt) => true, - Called for every touch move on the View when it is not the responder: does this view want to "claim" touch responsiveness?

If the View returns true and attempts to become the responder, one of the following will happen:

  • View.props.onResponderGrant: (evt) => {} - The View is now responding for touch events. This is the time to highlight and show the user what is happening
  • View.props.onResponderReject: (evt) => {} - Something else is the responder right now and will not release it

If the view is responding, the following handlers can be called:

  • View.props.onResponderMove: (evt) => {} - The user is moving their finger
  • View.props.onResponderRelease: (evt) => {} - Fired at the end of the touch, ie "touchUp"
  • View.props.onResponderTerminationRequest: (evt) => true - Something else wants to become responder. Should this view release the responder? Returning true allows release
  • View.props.onResponderTerminate: (evt) => {} - The responder has been taken from the View. Might be taken by other views after a call to onResponderTerminationRequest, or might be taken by the OS without asking (happens with control center/ notification center on iOS)

evt is a synthetic touch event with the following form:

  • nativeEvent
    • changedTouches - Array of all touch events that have changed since the last event
    • identifier - The ID of the touch
    • locationX - The X position of the touch, relative to the element
    • locationY - The Y position of the touch, relative to the element
    • pageX - The X position of the touch, relative to the root element
    • pageY - The Y position of the touch, relative to the root element
    • target - The node id of the element receiving the touch event
    • timestamp - A time identifier for the touch, useful for velocity calculation
    • touches - Array of all current touches on the screen

Capture ShouldSet Handlers #

onStartShouldSetResponder and onMoveShouldSetResponder are called with a bubbling pattern, where the deepest node is called first. That means that the deepest component will become responder when multiple Views return true for *ShouldSetResponder handlers. This is desirable in most cases, because it makes sure all controls and buttons are usable.

However, sometimes a parent will want to make sure that it becomes responder. This can be handled by using the capture phase. Before the responder system bubbles up from the deepest component, it will do a capture phase, firing on*ShouldSetResponderCapture. So if a parent View wants to prevent the child from becoming responder on a touch start, it should have a onStartShouldSetResponderCapture handler which returns true.

  • View.props.onStartShouldSetResponderCapture: (evt) => true,
  • View.props.onMoveShouldSetResponderCapture: (evt) => true,

PanResponder #

For higher-level gesture interpretation, check out PanResponder.

Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/getting-started.html b/docs/getting-started.html index 56aaff943f8..2da8c6575a9 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -1,4 +1,9 @@ -Getting Started – React Native | A framework for building native apps using React

Getting Started #

Edit on GitHub
+Getting Started – React Native | A framework for building native apps using React

Getting Started #

Edit on GitHub

Welcome to React Native! This page will help you install React Native on +your system, so that you can build apps with it right away. If you already +have React Native installed, you can skip ahead to the +Tutorial.

The instructions are a bit different depending on your development operating system, and whether you want to start developing for iOS or Android. If you +want to develop for both iOS and Android, that's fine - you just have to pick +one to start with, since the setup is a bit different.

-Target: +Mobile OS: iOS Android Development OS: @@ -38,241 +43,80 @@ block { display: none; } -

Unsupported #

Unfortunately, Apple only lets you develop for iOS on a Mac machine. Please check out the Android instructions instead.
+

Unsupported #

Unfortunately, Apple only lets you develop for iOS on a Mac. If you want to build an iOS app but you don't have a Mac yet, you can try starting with the Android instructions instead.
- + -

Installation #

Required Prerequisites #

Homebrew #

Homebrew, in order to install the required NodeJS, in addition to some -recommended installs.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Node #

Use Homebrew to install Node.js.

NodeJS 4.0 or greater is required for React Native. The default Homebrew package for Node is -currently 6.0, so that is not an issue.

brew install node

React Native Command Line Tools #

The React Native command line tools allow you to easily create and initialize projects, etc.

npm install -g react-native-cli

If you see the error, EACCES: permission denied, please run the command: -sudo npm install -g react-native-cli.

+

Dependencies for Mac + iOS #

You will need Xcode, node.js, the React Native command line tools, and Watchman.

-

Xcode #

Xcode 7.0 or higher is required. You can install Xcode via the App Store or Apple developer downloads. This will install the Xcode IDE and Xcode Command Line Tools.

While generally installed by default, you can verify that the Xcode Command Line Tools are installed by launching Xcode and selecting Xcode | Preferences | Locations and ensuring there is a version of the command line tools shown in the Command Line Tools list box. The Command Line Tools give you git, etc.

+

Dependencies for Mac + Android #

You will need Android Studio, node.js, the React Native command line tools, and Watchman.

-

Android Studio #

Android Studio 2.0 or higher.

Android Studio requires the Java Development Kit [JDK] 1.8 or higher. You can type -javac -version to see what version you have, if any. If you do not meet the JDK requirement, -you can -download it.

Android Studio will provide you the Android SDK and emulator required to run and test your React -Native apps.

Unless otherwise mentioned, keep all the setup defaults intact. For example, the -Android Support Repository is installed automatically with Android Studio, and we need that -for React Native.

You will need to customize your installation:

  • Choose a Custom installation

custom installation

  • Choose both Performance and Android Virtual Device

additional installs

  • After installation, choose Configure | SDK Manager from the Android Studio welcome window.

configure sdk

  • In the SDK Platforms window, choose Show Package Details and under Android 6.0 (Marshmallow), make sure that Google APIs, Intel x86 Atom System Image, Intel x86 Atom_64 System Image, and Google APIs Intel x86 Atom_64 System Image are checked.

platforms

  • In the SDK Tools window, choose Show Package Details and under Android SDK Build Tools, make sure that Android SDK Build-Tools 23.0.1 is selected.

build tools

ANDROID_HOME Environment Variable #

Ensure the ANDROID_HOME environment variable points to your existing Android SDK. To do that, add -this to your ~/.bashrc, ~/.bash_profile (or whatever your shell uses) and re-open your terminal:

# If you installed the SDK without Android Studio, then it may be something like: -# /usr/local/opt/android-sdk -export ANDROID_HOME=~/Library/Android/sdk
+

We recommend installing node and watchman via Homebrew.

brew install node +brew install watchman

Node comes with npm, which lets you install the React Native command line interface.

npm install -g react-native-cli

If you get a permission error, try with sudo: sudo npm install -g react-native-cli.

-

Highly Recommended Installs #

Watchman #

Watchman is a tool by Facebook for watching -changes in the filesystem. It is recommended you install it for better performance.

brew install watchman

Flow #

Flow, for static typechecking of your React Native code (when using -Flow as part of your codebase).

brew install flow
+

The easiest way to install Xcode is via the Mac App Store.

-

Add Android Tools Directory to your PATH #

You can add the Android tools directory on your PATH in case you need to run any of the Android -tools from the command line such as android avd. In your ~/.bash or ~/.bash_profile:

# Your exact string here may be different. -PATH="~/Library/Android/sdk/tools:~/Library/Android/sdk/platform-tools:${PATH}" -export PATH

Gradle Daemon #

Enable Gradle Daemon which greatly improves incremental build times for changes in java code.

Other Optional Installs #

Git #

Git version control. If you have installed Xcode, Git is -already installed, otherwise run the following:

brew install git
+

Download and install Android Studio.

If you plan to make changes in Java code, we recommend Gradle Daemon which speeds up the build.

-

Nuclide #

Nuclide is an IDE from Facebook providing a first-class development environment -for writing, running and -debugging -React Native applications.

Get started with Nuclide here.

+ -

Genymotion #

Genymotion is an alternative to the stock Google emulator that comes with Android Studio. -However, it's only free for personal use. If you want to use Genymotion, see below.

  1. Download and install Genymotion.
  2. Open Genymotion. It might ask you to install VirtualBox unless you already have it.
  3. Create a new emulator and start it.
  4. To bring up the developer menu press ⌘+M

Troubleshooting #

Virtual Device Not Created When Installing Android Studio #

There is a known bug on some versions -of Android Studio where a virtual device will not be created, even though you selected it in the -installation sequence. You may see this at the end of the installation:

Creating Android virtual device -Unable to create a virtual device: Unable to create Android virtual device

If you see this, run android avd and create the virtual device manually.

avd

Then select the new device in the AVD Manager window and click Start....

Shell Command Unresponsive Exception #

If you encounter:

Execution failed for task ':app:installDebug'. - com.android.builder.testing.api.DeviceException: com.android.ddmlib.ShellCommandUnresponsiveException

try downgrading your Gradle version to 1.2.3 in <project-name>/android/build.gradle (https://github.com/facebook/react-native/issues/2720)

+

Dependencies for Linux + Android #

- +

Dependencies for Windows + Android #

-

Installation #

Required Prerequisites #

+

You will need node.js, the React Native command line tools, Watchman, and Android Studio.

-

Chocolatey #

Chocolatey is a package manager for Windows similar to yum and -apt-get. See the website for updated instructions, but installing from -the Terminal should be something like:

@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

Normally when you run Chocolatey to install a package, you should run your Terminal as -Administrator.

Python 2 #

Fire up the Termimal and use Chocolatey to install Python 2.

Python 3 will currently not work when initializing a React Native project.

choco install python2
+

Follow the installation instructions for your Linux distribution to install Node.js 4 or newer.

-

Node #

+

We recommend installing node.js and Python2 via Chocolatey, a popular package manager for Windows. Open a Command Prompt as Administrator, then run:

choco install nodejs.install +choco install python2
-

Fire up the Terminal and type the following commands to install NodeJS from the NodeSource -repository:

sudo apt-get install -y build-essential -curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash - -sudo apt-get install -y nodejs -sudo ln -s /usr/bin/nodejs /usr/bin/node
+

Node comes with npm, which lets you install the React Native command line interface.

npm install -g react-native-cli
-

Fire up the Termimal and use Chocolatey to install NodeJS.

choco install nodejs.install
+

Download and install Android Studio.

-

React Native Command Line Tools #

The React Native command line tools allow you to easily create and initialize projects, etc.

npm install -g react-native-cli

If you see the error, EACCES: permission denied, please run the command: -sudo npm install -g react-native-cli.

Android Studio #

Android Studio 2.0 or higher.

Android Studio requires the Java Development Kit [JDK] 1.8 or higher. You can type -javac -version to see what version you have, if any. If you do not meet the JDK requirement, -you can -download it, -or use a pacakage manager to install it (e.g. choco install jdk8, -apt-get install default-jdk).

Android Studio will provide you the Android SDK and emulator required to run and test your React -Native apps.

Unless otherwise mentioned, keep all the setup defaults intact. For example, the -Android Support Repository is installed automatically with Android Studio, and we need that -for React Native.

+

Watchman is a tool by Facebook for watching changes in the filesystem. Installing it should +improve performance, but you can also try not installing it, if the installation process is too annoying. You can follow the Watchman installation guide to compile and install from source.

-

You will need to customize your installation:

  • Choose a Custom installation

custom installation

  • Choose Android Virtual Device

additional installs

+

If you plan to make changes in Java code, we recommend Gradle Daemon which speeds up the build.

-
  • Make sure all components are checked for the install, particularly the Android SDK and Android Device Emulator.

  • After the initial install, choose a Custom installation.

custom installation

  • Verify installed components, particularly the emulator and the HAXM accelerator. They should be checked.

verify installs

+

Testing your React Native Installation #

-
  • After installation, choose Configure | SDK Manager from the Android Studio welcome window.
- -

configure sdk

- -

configure sdk

- -
  • In the SDK Platforms window, choose Show Package Details and under Android 6.0 (Marshmallow), make sure that Google APIs, Intel x86 Atom System Image, Intel x86 Atom_64 System Image, and Google APIs Intel x86 Atom_64 System Image are checked.
- -

platforms

- -

platforms

- -
  • In the SDK Tools window, choose Show Package Details and under Android SDK Build Tools, make sure that Android SDK Build-Tools 23.0.1 is selected.
- -

build tools

- -

build tools

- -

ANDROID_HOME Environment Variable #

Ensure the ANDROID_HOME environment variable points to your existing Android SDK.

- -

To do that, add this to your ~/.bashrc, ~/.bash_profile (or whatever your shell uses) and -re-open your terminal:

# If you installed the SDK without Android Studio, then it may be something like: -# /usr/local/opt/android-sdk; Generally with Android Studio, the SDK is installed here... -export ANDROID_HOME=~/Android/Sdk

You need to restart the Terminal to apply the new environment variables (or source the relevant -bash file).

- -

Go to Control Panel -> System and Security -> System -> Change settings -> -Advanced System Settings -> Environment variables -> New

Your path to the SDK will vary to the one shown below.

env variable

You need to restart the Command Prompt (Windows) to apply the new environment variables.

- -

Highly Recommended Installs #

- -

Watchman #

Watchman is a tool by Facebook for watching changes in the filesystem. It is recommended you install -it for better performance.

This also helps avoid a node file-watching bug.

Type the following into your terminal to compile watchman from source and install it:

git clone https://github.com/facebook/watchman.git -cd watchman -git checkout v4.5.0 # the latest stable release -./autogen.sh -./configure -make -sudo make install

Flow #

Flow, for static typechecking of your React Native code (when using -Flow as part of your codebase).

Type the following in the terminal:

npm install -g flow-bin
- -

Gradle Daemon #

Enable Gradle Daemon which greatly -improves incremental build times for changes in java code.

- -
touch ~/.gradle/gradle.properties && echo "org.gradle.daemon=true" >> ~/.gradle/gradle.properties
- -
(if not exist "%USERPROFILE%/.gradle" mkdir "%USERPROFILE%/.gradle") && (echo org.gradle.daemon=true >> "%USERPROFILE%/.gradle/gradle.properties")
- -

Android Emulator Accelerator #

You may have seen the following screen when installing Android Studio.

accelerator

If your system supports KVM, you should install the -Intel Android Emulator Accelerator.

- -

Add Android Tools Directory to your PATH #

You can add the Android tools directory on your PATH in case you need to run any of the Android -tools from the command line such as android avd.

- -

In your ~/.bashrc or ~/.bash_profile:

# Your exact string here may be different. -PATH="~/Android/Sdk/tools:~/Android/Sdk/platform-tools:${PATH}" -export PATH
- -

Go to Control Panel -> System and Security -> System -> Change settings -> -Advanced System Settings -> Environment variables -> highlight PATH -> Edit...

The location of your Android tools directories will vary.

env variable

- -

Other Optional Installs #

Git #

- -

Install Git via your package manager -(e.g., sudo apt-get install git-all).

- -

You can use Chocolatey to install git via:

choco install git

Alternatively, you can download and install Git for Windows. -During the setup process, choose "Run Git from Windows Command Prompt", which will add git to your -PATH environment variable.

- -

Nuclide #

[Nuclide] is an IDE from Facebook providing a first-class development environment for writing, -running and -debugging -React Native applications.

Get started with Nuclide here.

- -

Genymotion #

Genymotion is an alternative to the stock Google emulator that comes with Android Studio. -However, it's only free for personal use. If you want to use the stock Google emulator, see below.

  1. Download and install Genymotion.
  2. Open Genymotion. It might ask you to install VirtualBox unless you already have it.
  3. Create a new emulator and start it.
  4. To bring up the developer menu press ⌘+M
- -

Visual Studio Emulator for Android #

The Visual Studio Emulator for Android -is a free android emulator that is hardware accelerated via Hyper-V. It is an alternative to the -stock Google emulator that comes with Android Studio. It doesn't require you to install Visual -Studio at all.

To use it with react-native you just have to add a key and value to your registry:

  1. Open the Run Command (Windows+R)
  2. Enter regedit.exe
  3. In the Registry Editor navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Android SDK Tools
  4. Right Click on Android SDK Tools and choose New > String Value
  5. Set the name to Path
  6. Double Click the new Path Key and set the value to C:\Program Files\Android\sdk. The path value might be different on your machine.

You will also need to run the command adb reverse tcp:8081 tcp:8081 with this emulator.

Then restart the emulator and when it runs you can just do react-native run-android as usual.

- -

Troubleshooting #

Unable to run mksdcard SDK Tool #

When installing Android Studio, if you get the error:

Unable to run mksdcard SDK tool

then install the standard C++ library:

sudo apt-get install lib32stdc++6

Virtual Device Not Created When Installing Android Studio #

There is a known bug on some versions -of Android Studio where a virtual device will not be created, even though you selected it in the -installation sequence. You may see this at the end of the installation:

- -
Creating Android virtual device -Unable to create a virtual device: Unable to create Android virtual device
- -

no virtual device

- -

If you see this, run android avd and create the virtual device manually.

- -

avd

- -

avd

- -

Then select the new device in the AVD Manager window and click Start....

- -

Shell Command Unresponsive Exception #

In case you encounter

Execution failed for task ':app:installDebug'. - com.android.builder.testing.api.DeviceException: com.android.ddmlib.ShellCommandUnresponsiveException

try downgrading your Gradle version to 1.2.3 in <project-name>/android/build.gradle (https://github.com/facebook/react-native/issues/2720)

- -

Testing Installation #

- -
react-native init AwesomeProject +

Use the React Native command line tools to generate a new React Native project called "AwesomeProject", then run react-native run-ios inside the newly created folder.

react-native init AwesomeProject cd AwesomeProject -react-native run-ios

You can also -open the AwesomeProject -folder in Nuclide and -run the application, or open -ios/AwesomeProject.xcodeproj and hit the Run button in Xcode.

+react-native run-ios

You should see your new app running in the iOS Simulator shortly. react-native run-ios is just one way to run your app - you can also run it directly from within Xcode or Nuclide.

-
react-native init AwesomeProject +

Use the React Native command line tools to generate a new React Native project called "AwesomeProject", then run react-native run-android inside the newly created folder.

react-native init AwesomeProject cd AwesomeProject -react-native run-android

You can also -open the AwesomeProject -folder in Nuclide and -run the application.

+react-native run-android

If everything is set up correctly, you should see your new app running in your Android emulator shortly. react-native run-android is just one way to run your app - you can also run it directly from within Android Studio or Nuclide.

-

Modifying Project #

Now that you successfully started the project, let's modify it:

+

Modifying your app #

Now that you have successfully run the app, let's modify it.

-
  • Open index.ios.js in your text editor of choice (e.g. Nuclide) and edit some lines.
  • Hit ⌘-R in your iOS simulator to reload the app and see your change!
+
  • Open index.ios.js in your text editor of choice and edit some lines.
  • Hit Command⌘ + R in your iOS Simulator to reload the app and see your change!
-
  • Open index.android.js in your text editor of choice (e.g. Nuclide) and edit some lines.
  • Press the R key twice OR open the menu (F2 by default, or ⌘-M in Genymotion) and select Reload JS to see your change!
  • Run adb logcat *:S ReactNative:V ReactNativeJS:V in a terminal to see your app's logs
+
  • Open index.android.js in your text editor of choice and edit some lines.
  • Press the R key twice or select Reload from the Developer Menu to see your change!
-

That's It #

Congratulations! You've successfully run and modified your first React Native app.

+

That's it! #

Congratulations! You've successfully run and modified your first React Native app.

-

Testing Installation #

react-native init AwesomeProject +

Testing your React Native Installation #

Use the React Native command line tools to generate a new React Native project called "AwesomeProject", then run react-native run-android inside the newly created folder.

react-native init AwesomeProject cd AwesomeProject -react-native run-android
+react-native run-android

If everything is set up correctly, you should see your new app running in your Android emulator shortly.

A common issue is that the packager is not started automatically when you run +react-native run-android. You can start it manually using react-native start.

-

Troubleshooting Run #

A common issue is that the packager is not started automatically when you run -react-native run-android. You can start it manually using:

cd AwesomeProject -react-native start
+

If you hit a ERROR Watcher took too long to load on Windows, try increasing the timeout in this file (under your node_modules/react-native/).

-

Or if you hit a ERROR Watcher took too long to load on Windows, try increasing the timeout in this file (under your node_modules/react-native/).

+

Modifying your app #

Now that you have successfully run the app, let's modify it.

  • Open index.android.js in your text editor of choice and edit some lines.
  • Press the R key twice or select Reload from the Developer Menu to see your change!

That's it! #

Congratulations! You've successfully run and modified a React Native app.

-

Modifying Project #

Now that you successfully started the project, let's modify it:

  • Open index.android.js in your text editor of choice (e.g. Nuclide) and edit some lines.
  • Press the R key twice OR open the menu (F2 by default, or ctrl-M in the emulator) and select Reload JS to see your change!
  • Run adb logcat *:S ReactNative:V ReactNativeJS:V in a terminal to see your app's logs

That's It #

Congratulations! You've successfully run and modified your first React Native app.

+
- - -

Common Followups #

- - - - - - - -

Common Followups #

-

We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/handling-text-input.html b/docs/handling-text-input.html new file mode 100644 index 00000000000..1c46ac8d53d --- /dev/null +++ b/docs/handling-text-input.html @@ -0,0 +1,46 @@ +Handling Text Input – React Native | A framework for building native apps using React

Handling Text Input #

Edit on GitHub

TextInput is a basic component that allows the user to enter text. It has an onChangeText prop that takes +a function to be called every time the text changed, and an onSubmitEditing prop that takes a function to be called when the text is submitted.

For example, let's say that as the user types, you're translating their words into a different language. In this new language, every single word is written the same way: 🍕. So the sentence "Hello there Bob" would be translated +as "🍕🍕🍕".

import React, { Component } from 'react'; +import { AppRegistry, Text, TextInput, View } from 'react-native'; + +class PizzaTranslator extends Component { + constructor(props) { + super(props); + this.state = {text: ''}; + } + + render() { + return ( + <View style={{padding: 10}}> + <TextInput + style={{height: 40}} + placeholder="Type here to translate!" + onChangeText={(text) => this.setState({text})} + /> + <Text style={{padding: 10, fontSize: 42}}> + {this.state.text.split(' ').map((word) => word && '🍕').join(' ')} + </Text> + </View> + ); + } +} + +AppRegistry.registerComponent('PizzaTranslator', () => PizzaTranslator);

In this example, we store text in the state, because it changes over time.

There are a lot more things you might want to do with a text input. For example, you could validate the text inside while the user types. For more detailed examples, see the React docs on controlled components, or the reference docs for TextInput.

Text input is probably the simplest example of a component whose state naturally changes over time. Next, let's look at another type of component like this is one that controls layout, and learn about the ScrollView.

Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/handling-touches.html b/docs/handling-touches.html new file mode 100644 index 00000000000..24c6b2d8283 --- /dev/null +++ b/docs/handling-touches.html @@ -0,0 +1,31 @@ +Handling Touches – React Native | A framework for building native apps using React

Handling Touches #

Edit on GitHub

Users interact with mobile apps mainly through touch. They can use a combination of gestures, such as tapping on a button, scrolling a list, or zooming on a map.

React Native provides components to handle common gestures, such as taps and swipes, as well as a comprehensive gesture responder system to allow for more advanced gesture recognition.

Tappable Components #

You can use "Touchable" components when you want to capture a tapping gesture. They take a function through the onPress props which will be called when the touch begins and ends within the bounds of the component.

Example:

class MyButton extends Component { + _onPressButton() { + console.log("You tapped the button!"); + } + + render() { + return ( + <TouchableHighlight onPress={this._onPressButton}> + <Text>Button</Text> + </TouchableHighlight> + ); + } +}

Tappable components should provide feedback that show the user what is handling their touch, and what will happen when they lift their finger. The user should also be able to cancel a tap by dragging their finger away.

Which component you use will depend on what kind of feedback you want to provide:

  • Generally, you can use TouchableHighlight anywhere you would use a button or link on web. The view's background will be darkened when the user presses down on the button.

  • You may consider using TouchableNativeFeedback on Android to display ink surface reaction ripples that respond to the user's touch.

  • TouchableOpacity can be used to provide feedback by reducing the opacity of the button, allowing the background to be seen through while the user is pressing down.

  • If you need to handle a tap gesture but you don't want any feedback to be displayed, use TouchableWithoutFeedback.

Long presses #

In some cases, you may want to detect when a user presses and holds a view for a set amount of time. These long presses can be handled by passing a function to the onLongPress props of any of the touchable components listed above.

Scrolling lists and swiping views #

A common pattern to many mobile apps is the scrollable list of items. Users interact with these using panning or swiping gestures. The ScrollView component displays a list of items that can be scrolled using these gestures.

ScrollViews can scroll vertically or horizontally, and can be configured to allow paging through views using swiping gestures by using the pagingEnabled props. Swiping horizontally between views can also be implemented on Android using the ViewPagerAndroid component.

A ListView is a special kind of ScrollView that is best suited for displaying long vertical lists of items. It can also display section headers and footers, similar to UITableViews on iOS.

Pinch-to-zoom #

A ScrollView with a single item can be used to allow the user to zoom content. Set up the maximumZoomScale and minimumZoomScale props and your user will be able to use pinch and expand gestures to zoom in and out.

Handling additional gestures #

If you want to allow a user to drag a view around the screen, or you want to implement your own custom pan/drag gesture, take a look at the PanResponder API or the gesture responder system docs.

Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/height-and-width.html b/docs/height-and-width.html new file mode 100644 index 00000000000..a4c444e0ce4 --- /dev/null +++ b/docs/height-and-width.html @@ -0,0 +1,52 @@ +Height and Width – React Native | A framework for building native apps using React

Height and Width #

Edit on GitHub

A component's height and width determine its size on the screen.

Fixed Dimensions #

The simplest way to set the dimensions of a component is by adding a fixed width and height to style. All dimensions in React Native are unitless, and represent density-independent pixels.

import React, { Component } from 'react'; +import { AppRegistry, View } from 'react-native'; + +class FixedDimensionsBasics extends Component { + render() { + return ( + <View> + <View style={{width: 50, height: 50, backgroundColor: 'powderblue'}} /> + <View style={{width: 100, height: 100, backgroundColor: 'skyblue'}} /> + <View style={{width: 150, height: 150, backgroundColor: 'steelblue'}} /> + </View> + ); + } +}; + +AppRegistry.registerComponent('AwesomeProject', () => FixedDimensionsBasics);

Setting dimensions this way is common for components that should always render at exactly the same size, regardless of screen dimensions.

Flex Dimensions #

Use flex in a component's style to have the component expand and shrink dynamically based on available space. Normally you will use flex: 1, which tells a component to fill all available space, shared evenly amongst each other component with the same parent. The larger the flex given, the higher the ratio of space a component will take compared to its siblings.

A component can only expand to fill available space if its parent has dimensions greater than 0. If a parent does not have either a fixed width and height or flex, the parent will have dimensions of 0 and the flex children will not be visible.

import React, { Component } from 'react'; +import { AppRegistry, View } from 'react-native'; + +class FlexDimensionsBasics extends Component { + render() { + return ( + // Try removing the `flex: 1` on the parent View. + // The parent will not have dimensions, so the children can't expand. + // What if you add `height: 300` instead of `flex: 1`? + <View style={{flex: 1}}> + <View style={{flex: 1, backgroundColor: 'powderblue'}} /> + <View style={{flex: 2, backgroundColor: 'skyblue'}} /> + <View style={{flex: 3, backgroundColor: 'steelblue'}} /> + </View> + ); + } +}; + +AppRegistry.registerComponent('AwesomeProject', () => FlexDimensionsBasics);

After you can control a component's size, the next step is to learn how to lay it out on the screen.

Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

Take Survey
© 2016 Facebook Inc.
\ No newline at end of file diff --git a/docs/image.html b/docs/image.html index d4665936f11..56ab97ee9f6 100644 --- a/docs/image.html +++ b/docs/image.html @@ -1,26 +1,61 @@ -Image – React Native | A framework for building native apps using React

Image #

Edit on GitHub

A React component for displaying different types of images, +Image – React Native | A framework for building native apps using React

Image #

Edit on GitHub

A React component for displaying different types of images, including network images, static resources, temporary local images, and -images from local disk, such as the camera roll.

Example usage:

renderImages: function() { - return ( - <View> - <Image - style={styles.icon} - source={require('./myIcon.png')} - /> - <Image - style={styles.logo} - source={{uri: 'http://facebook.github.io/react/img/logo_og.png'}} - /> - </View> - ); -},

Props #

onLayout function #

Invoked on mount and layout changes with -{nativeEvent: {layout: {x, y, width, height}}}.

onLoad function #

Invoked when load completes successfully

onLoadEnd function #

Invoked when load either succeeds or fails

onLoadStart function #

Invoked on load start

resizeMode enum('cover', 'contain', 'stretch') #

Determines how to resize the image when the frame doesn't match the raw -image dimensions.

'cover': Scale the image uniformly (maintain the image's aspect ratio) +images from local disk, such as the camera roll.

This exmaples shows both fetching and displaying an image from local storage as well as on from +network.

import React, { Component } from 'react'; +import { AppRegistry, View, Image } from 'react-native'; + +class DisplayAnImage extends Component { + render() { + return ( + <View> + <Image + source={require('./img/favicon.png')} + /> + <Image + source={{uri: 'http://facebook.github.io/react/img/logo_og.png'}} + /> + </View> + ); + } +} + +// App registration and rendering +AppRegistry.registerComponent('DisplayAnImage', () => DisplayAnImage);

You can also add style to an image:

import React, { Component } from 'react'; +import { AppRegistry, View, Image, StyleSheet} from 'react-native'; + +const styles = StyleSheet.create({ + stretch: { + width: 50, + height: 200 + } +}); + +class DisplayAnImageWithStyle extends Component { + render() { + return ( + <View> + <Image + style={styles.stretch} + source={require('./img/favicon.png')} + /> + </View> + ); + } +} + +// App registration and rendering +AppRegistry.registerComponent( + 'DisplayAnImageWithStyle', + () => DisplayAnImageWithStyle +);

Props #

onLayout function #

Invoked on mount and layout changes with +{nativeEvent: {layout: {x, y, width, height}}}.

onLoad function #

Invoked when load completes successfully.

onLoadEnd function #

Invoked when load either succeeds or fails.

onLoadStart function #

Invoked on load start.

e.g., onLoadStart={(e) => this.setState({loading: true})}

resizeMode enum('cover', 'contain', 'stretch') #

Determines how to resize the image when the frame doesn't match the raw +image dimensions.

  • cover: Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal -to or larger than the corresponding dimension of the view (minus padding).

    'contain': Scale the image uniformly (maintain the image's aspect ratio) +to or larger than the corresponding dimension of the view (minus padding).

  • contain: Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal to -or less than the corresponding dimension of the view (minus padding).

    'stretch': Scale width and height independently, This may change the -aspect ratio of the src.

source ImageSourcePropType #

The image source (either a remote URL or a local file resource).

style style #

backfaceVisibility enum('visible', 'hidden')
backgroundColor color
borderBottomLeftRadius number
borderBottomRightRadius number
borderColor color
borderRadius number
borderTopLeftRadius number
borderTopRightRadius number
borderWidth number
opacity number
overflow enum('visible', 'hidden')
resizeMode Object.keys(ImageResizeMode)
tintColor color

Changes the color of all the non-transparent pixels to the tintColor.

androidoverlayColor string

When the image has rounded corners, specifying an overlayColor will +or less than the corresponding dimension of the view (minus padding).

  • stretch: Scale width and height independently, This may change the +aspect ratio of the src.

  • repeat: Repeat the image to cover the frame of the view. The +image will keep it's size and aspect ratio. (iOS only)

  • source ImageSourcePropType #

    The image source (either a remote URL or a local file resource).

    style style #

    backfaceVisibility enum('visible', 'hidden')
    backgroundColor color
    borderBottomLeftRadius number
    borderBottomRightRadius number
    borderColor color
    borderRadius number
    borderTopLeftRadius number
    borderTopRightRadius number
    borderWidth number
    opacity number
    overflow enum('visible', 'hidden')
    resizeMode Object.keys(ImageResizeMode)
    tintColor color

    Changes the color of all the non-transparent pixels to the tintColor.

    androidoverlayColor string

    When the image has rounded corners, specifying an overlayColor will cause the remaining space in the corners to be filled with a solid color. This is useful in cases which are not supported by the Android implementation of rounded corners: @@ -28,30 +63,38 @@ implementation of rounded corners: - Animated GIFs

    A typical way to use this prop is with images displayed on a solid background and setting the overlayColor to the same color as the background.

    For details of how this works under the hood, see -http://frescolib.org/docs/rounded-corners-and-circles.html

    testID string #

    A unique identifier for this element to be used in UI Automation +http://frescolib.org/docs/rounded-corners-and-circles.html

    ImageResizeMode is an Enum for different image resizing modes, set via the +resizeMode style property on Image components. The values are contain, cover, +stretch, center, repeat.

    testID string #

    A unique identifier for this element to be used in UI Automation testing scripts.

    iosaccessibilityLabel string #

    The text that's read by the screen reader when the user interacts with the image.

    iosaccessible bool #

    When true, indicates the image is an accessibility element.

    iosblurRadius number #

    blurRadius: the blur radius of the blur filter added to the image

    ioscapInsets {top: number, left: number, bottom: number, right: number} #

    When the image is resized, the corners of the size specified -by capInsets will stay a fixed size, but the center content and borders +by capInsets will stay a fixed size, but the center content and borders of the image will be stretched. This is useful for creating resizable -rounded buttons, shadows, and other resizable assets. More info on -Apple documentation

    iosdefaultSource {uri: string, width: number, height: number, scale: number}, number #

    A static image to display while loading the image source.

    iosonError function #

    Invoked on load error with {nativeEvent: {error}}

    iosonProgress function #

    Invoked on download progress with {nativeEvent: {loaded, total}}

    Methods #

    static getSize(uri: string, success: (width: number, height: number) => void, failure: (error: any) => void) #

    Retrieve the width and height (in pixels) of an image prior to displaying it. +rounded buttons, shadows, and other resizable assets. More info in the +official Apple documentation.

    iosdefaultSource {uri: string, width: number, height: number, scale: number}, number #

    A static image to display while loading the image source.

    • uri - a string representing the resource identifier for the image, which +should be either a local file path or the name of a static image resource +(which should be wrapped in the require('./path/to/image.png') function).
    • width, height - can be specified if known at build time, in which case +these will be used to set the default <Image/> component dimensions.
    • scale - used to indicate the scale factor of the image. Defaults to 1.0 if +unspecified, meaning that one image pixel equates to one display point / DIP.
    • number - Opaque type returned by something like require('./image.jpg').

    iosonError function #

    Invoked on load error with {nativeEvent: {error}}.

    iosonProgress function #

    Invoked on download progress with {nativeEvent: {loaded, total}}.

    Methods #

    static getSize(uri, success, failure): #

    Retrieve the width and height (in pixels) of an image prior to displaying it. This method can fail if the image cannot be found, or fails to download.

    In order to retrieve the image dimensions, the image may first need to be loaded or downloaded, after which it will be cached. This means that in principle you could use this method to preload images, however it is not optimized for that purpose, and may in future be implemented in a way that does not fully load/download the image data. A proper, supported way to -preload images will be provided as a separate API.

    static prefetch(url: string) #

    Prefetches a remote image for later use by downloading it to the disk -cache

    Examples #

    Edit on GitHub
    'use strict'; +preload images will be provided as a separate API.

    Parameters:
    Name and TypeDescription
    uri

    string

    The location of the image.

    success

    function

    The function that will be called if the image was sucessfully found and width +and height retrieved.

    failure

    function

    The function that will be called if there was an error, such as failing to +to retrieve the image.

    static prefetch(url): #

    Prefetches a remote image for later use by downloading it to the disk +cache

    Parameters:
    Name and TypeDescription
    url

    string

    The remote location of the image.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); var { + ActivityIndicator, Image, Platform, StyleSheet, Text, View, - ActivityIndicatorIOS } = ReactNative; var base64Icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAQAAACSR7JhAAADtUlEQVR4Ac3YA2Bj6QLH0XPT1Fzbtm29tW3btm3bfLZtv7e2ObZnms7d8Uw098tuetPzrxv8wiISrtVudrG2JXQZ4VOv+qUfmqCGGl1mqLhoA52oZlb0mrjsnhKpgeUNEs91Z0pd1kvihA3ULGVHiQO2narKSHKkEMulm9VgUyE60s1aWoMQUbpZOWE+kaqs4eLEjdIlZTcFZB0ndc1+lhB1lZrIuk5P2aib1NBpZaL+JaOGIt0ls47SKzLC7CqrlGF6RZ09HGoNy1lYl2aRSWL5GuzqWU1KafRdoRp0iOQEiDzgZPnG6DbldcomadViflnl/cL93tOoVbsOLVM2jylvdWjXolWX1hmfZbGR/wjypDjFLSZIRov09BgYmtUqPQPlQrPapecLgTIy0jMgPKtTeob2zWtrGH3xvjUkPCtNg/tm1rjwrMa+mdUkPd3hWbH0jArPGiU9ufCsNNWFZ40wpwn+62/66R2RUtoso1OB34tnLOcy7YB1fUdc9e0q3yru8PGM773vXsuZ5YIZX+5xmHwHGVvlrGPN6ZSiP1smOsMMde40wKv2VmwPPVXNut4sVpUreZiLBHi0qln/VQeI/LTMYXpsJtFiclUN+5HVZazim+Ky+7sAvxWnvjXrJFneVtLWLyPJu9K3cXLWeOlbMTlrIelbMDlrLenrjEQOtIF+fuI9xRp9ZBFp6+b6WT8RrxEpdK64BuvHgDk+vUy+b5hYk6zfyfs051gRoNO1usU12WWRWL73/MMEy9pMi9qIrR4ZpV16Rrvduxazmy1FSvuFXRkqTnE7m2kdb5U8xGjLw/spRr1uTov4uOgQE+0N/DvFrG/Jt7i/FzwxbA9kDanhf2w+t4V97G8lrT7wc08aA2QNUkuTfW/KimT01wdlfK4yEw030VfT0RtZbzjeMprNq8m8tnSTASrTLti64oBNdpmMQm0eEwvfPwRbUBywG5TzjPCsdwk3IeAXjQblLCoXnDVeoAz6SfJNk5TTzytCNZk/POtTSV40NwOFWzw86wNJRpubpXsn60NJFlHeqlYRbslqZm2jnEZ3qcSKgm0kTli3zZVS7y/iivZTweYXJ26Y+RTbV1zh3hYkgyFGSTKPfRVbRqWWVReaxYeSLarYv1Qqsmh1s95S7G+eEWK0f3jYKTbV6bOwepjfhtafsvUsqrQvrGC8YhmnO9cSCk3yuY984F1vesdHYhWJ5FvASlacshUsajFt2mUM9pqzvKGcyNJW0arTKN1GGGzQlH0tXwLDgQTurS8eIQAAAABJRU5ErkJggg=='; @@ -129,7 +172,7 @@ const IMAGE_PREFETCH_URL = var loader = this.state.loading ? <View style={styles.progress}> <Text>{this.state.progress}%</Text> - <ActivityIndicatorIOS style={{marginLeft:5}}/> + <ActivityIndicator style={{marginLeft:5}} /> </View> : null; return this.state.error ? <Text>{this.state.error}</Text> : @@ -177,6 +220,63 @@ const IMAGE_PREFETCH_URL = }, }); +var MultipleSourcesExample = React.createClass({ + getInitialState: function() { + return { + width: 30, + height: 30, + }; + }, + render: function() { + return ( + <View style={styles.container}> + <View style={{flexDirection: 'row', justifyContent: 'space-between'}}> + <Text + style={styles.touchableText} + onPress={this.decreaseImageSize} > + Decrease image size + </Text> + <Text + style={styles.touchableText} + onPress={this.increaseImageSize} > + Increase image size + </Text> + </View> + <Text>Container image size: {this.state.width}x{this.state.height} </Text> + <View + style={[styles.imageContainer, {height: this.state.height, width: this.state.width}]} > + <Image + style={{flex: 1}} + source={[ + {uri: 'http://facebook.github.io/react/img/logo_small.png', width: 38, height: 38}, + {uri: 'http://facebook.github.io/react/img/logo_small_2x.png', width: 76, height: 76}, + {uri: 'http://facebook.github.io/react/img/logo_og.png', width: 400, height: 400} + ]} + /> + </View> + </View> + ); + }, + increaseImageSize: function() { + if (this.state.width >= 100) { + return; + } + this.setState({ + width: this.state.width + 10, + height: this.state.height + 10, + }); + }, + decreaseImageSize: function() { + if (this.state.width <= 10) { + return; + } + this.setState({ + width: this.state.width - 10, + height: this.state.height - 10, + }); + }, +}); + exports.displayName = (undefined: ?string); exports.framework = 'React'; exports.title = '<Image>'; @@ -531,6 +631,16 @@ exports.examples return <ImageSizeExample source={fullImage} />; }, }, + { + title: 'MultipleSourcesExample', + description: + 'The `source` prop allows passing in an array of uris, so that native to choose which image ' + + 'to diplay based on the size of the of the target image', + render: function() { + return <MultipleSourcesExample />; + }, + platform: 'android', + }, ]; var fullImage = {uri: 'http://facebook.github.io/react/img/logo_og.png'}; @@ -588,7 +698,11 @@ exports.examples : 50, resizeMode: 'contain', }, -});
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/images.html b/docs/images.html index fa3a478cd70..92d7f695e7b 100644 --- a/docs/images.html +++ b/docs/images.html @@ -1,4 +1,4 @@ -Images – React Native | A framework for building native apps using React

    Images #

    Edit on GitHub

    Static Image Resources #

    As of 0.14 release, React Native provides a unified way of managing images in your iOS and Android apps. To add a static image to your app, place it somewhere in your source code tree and reference it like this:

    <Image source={require('./my-icon.png')} />

    The image name is resolved the same way JS modules are resolved. In the example above the packager will look for my-icon.png in the same folder as the component that requires it. Also if you have my-icon.ios.png and my-icon.android.png, the packager will pick the file depending on the platform you are running on.

    You can also use @2x, @3x, etc. suffix in the file name to provide images for different screen densities. For example, if you have the following file structure:

    . +Images – React Native | A framework for building native apps using React

    Images #

    Edit on GitHub

    Static Image Resources #

    As of 0.14 release, React Native provides a unified way of managing images in your iOS and Android apps. To add a static image to your app, place it somewhere in your source code tree and reference it like this:

    <Image source={require('./my-icon.png')} />

    The image name is resolved the same way JS modules are resolved. In the example above the packager will look for my-icon.png in the same folder as the component that requires it. Also if you have my-icon.ios.png and my-icon.android.png, the packager will pick the file depending on the platform you are running on.

    You can also use @2x, @3x, etc. suffix in the file name to provide images for different screen densities. For example, if you have the following file structure:

    . ├── button.js └── img ├── check@2x.png @@ -21,7 +21,7 @@ using local resources that are outside of Images.xcassets.

    < <Image source={...}> <Text>Inside</Text> </Image> -);

    Off-thread Decoding #

    Image decoding can take more than a frame-worth of time. This is one of the major source of frame drops on the web because decoding is done in the main thread. In React Native, image decoding is done in a different thread. In practice, you already need to handle the case when the image is not downloaded yet, so displaying the placeholder for a few more frames while it is decoding does not require any code change.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/integration-with-existing-apps.html b/docs/integration-with-existing-apps.html new file mode 100644 index 00000000000..b67db4934d1 --- /dev/null +++ b/docs/integration-with-existing-apps.html @@ -0,0 +1,440 @@ +Integration With Existing Apps – React Native | A framework for building native apps using React

    Integration With Existing Apps #

    Edit on GitHub
    + +Platform: +Objective-C +Swift +Android +
    + +
    + +

    This section will be updated shortly showing an integration into a more real world application such as the 2048 app that was used for Objective-C and Swift.

    + +

    Key Concepts #

    React Native is great when you are starting a new mobile app from scratch. However, it also works well for adding a single view or user flow to existing native applications. With a few steps, you can add new React Native based features, screens, views, etc.

    + +

    The keys to integrating React Native components into your iOS application are to:

    1. Understand what React Native components you want to integrate.
    2. Create a Podfile with subspecs for all the React Native components you will need for your integration.
    3. Create your actual React Native components in JavaScript.
    4. Add a new event handler that creates a RCTRootView that points to your React Native component and its AppRegistry name that you defined in index.ios.js.
    5. Start the React Native server and run your native application.
    6. Optionally add more React Native components.
    7. Debug.
    8. Prepare for deployment (e.g., via the react-native-xcode.sh script).
    9. Deploy and Profit!
    + +

    The keys to integrating React Native components into your iOS application are to:

    1. Understand what React Native components you want to integrate.
    2. Install react-native in your Android application root directory to create node_modules/ directory.
    3. Create your actual React Native components in JavaScript.
    4. Add com.facebook.react:react-native:+ and a maven pointing to the react-native binaries in node_nodules/ to your build.gradle file.
    5. Create a custom React Native specific Activity that creates a ReactRootView.
    6. Start the React Native server and run your native application.
    7. Optionally add more React Native components.
    8. Debug.
    9. Prepare for deployment.
    10. Deploy and Profit!
    + +

    Prerequisites #

    + +

    The Android Getting Started guide will install the appropriate prerequisites (e.g., npm) for React Native on the Android target platform and your chosen development environment.

    + +

    General #

    First, follow the Getting Started guide for your development environment and the iOS target platform to install the prerequisites for React Native.

    CocoaPods #

    CocoaPods is a package management tool for iOS and Mac development. We use it to add the actual React Native framework code locally into your current project.

    $ sudo gem install cocoapods

    It is technically possible not to use CocoaPods, but this requires manual library and linker additions that overly complicates this process.

    Our Sample App #

    + +

    Assume the app for integration is a 2048 game. Here is what the main menu of the native application looks like without React Native.

    + +

    Assume the app for integration is a 2048 game. Here is what the main menu of the native application looks like without React Native.

    + +

    Before RN Integration

    Package Dependencies #

    React Native integration requires both the React and React Native node modules. The React Native Framework will provide the code to allow your application integration to happen.

    package.json #

    We will add the package dependencies to a package.json file. Create this file in the root of your project if it does not exist.

    Normally with React Native projects, you will put files like package.json, index.ios.js, etc. in the root directory of your project and then have your iOS specific native code in a subdirectory like ios/ where your Xcode project is located (e.g., .xcodeproj).

    Below is an example of what your package.json file should minimally contain.

    Version numbers will vary according to your needs. Normally the latest versions for both React and React Native will be sufficient.

    + +
    { + "name": "NumberTileGame", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node node_modules/react-native/local-cli/cli.js start" + }, + "dependencies": { + "react": "15.0.2", + "react-native": "0.26.1" + } +}
    + +
    { + "name": "swift-2048", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node node_modules/react-native/local-cli/cli.js start" + }, + "dependencies": { + "react": "15.0.2", + "react-native": "0.26.1" + } +}
    + +

    Packages Installation #

    Install the React and React Native modules via the Node package manager. The Node modules will be installed into a node_modules/ directory in the root of your project.

    # From the directory containing package.json project, install the modules +# The modules will be installed in node_modules/ +$ npm install

    React Native Framework #

    The React Native Framework was installed as Node module in your project above. We will now install a CocoaPods Podfile with the components you want to use from the framework itself.

    Subspecs #

    Before you integrate React Native into your application, you will want to decide what parts of the React Native Framework you would like to integrate. That is where subspecs come in. When you create your Podfile, you are going to specify React Native library dependencies that you will want installed so that your application can use those libraries. Each library will become a subspec in the Podfile.

    The list of supported subspecs are in node_modules/react-native/React.podspec. They are generally named by functionality. For example, you will generally always want the Core subspec. That will get you the AppRegistry, StyleSheet, View and other core React Native libraries. If you want to add the React Native Text library (e.g., for <Text> elements), then you will need the RCTText subspec. If you want the Image library (e.g., for <Image> elements), then you will need the RCTImage subspec.

    Podfile #

    After you have used Node to install the React and React Native frameworks into the node_modules directory, and you have decided on what React Native elements you want to integrate, you are ready to create your Podfile so you can install those components for use in your application.

    The easiest way to create a Podfile is by using the CocoaPods init command in the native iOS code directory of your project:

    ## In the directory where your native iOS code is located (e.g., where your `.xcodeproj` file is located) +$ pod init

    The Podfile will be created and saved in the iOS directory (e.g., ios/) of your current project and will contain a boilerplate setup that you will tweak for your integration purposes. In the end, Podfile should look something similar to this:

    + +
    # The target name is most likely the name of your project. +target 'NumberTileGame' do + + # Your 'node_modules' directory is probably in the root of your project, + # but if not, adjust the `:path` accordingly + pod 'React', :path => '../node_modules/react-native', :subspecs => [ + 'Core', + 'RCTText', + 'RCTWebSocket', # needed for debugging + # Add any other subspecs you want to use in your project + ] + +end
    + +
    source 'https://github.com/CocoaPods/Specs.git' + +# Required for Swift apps +platform :ios, '8.0' +use_frameworks! + +# The target name is most likely the name of your project. +target 'swift-2048' do + + # Your 'node_modules' directory is probably in the root of your project, + # but if not, adjust the `:path` accordingly + pod 'React', :path => '../node_modules/react-native', :subspecs => [ + 'Core', + 'RCTText', + 'RCTWebSocket', # needed for debugging + # Add any other subspecs you want to use in your project + ] + +end
    + +

    Pod Installation #

    After you have created your Podfile, you are ready to install the React Native pod.

    $ pod install

    Your should see output such as:

    Analyzing dependencies +Fetching podspec for `React` from `../node_modules/react-native` +Downloading dependencies +Installing React (0.26.0) +Generating Pods project +Integrating client project +Sending stats +Pod installation complete! There are 3 dependencies from the Podfile and 1 total pod installed.
    + +

    If you get a warning such as "The swift-2048 [Debug] target overrides the FRAMEWORK_SEARCH_PATHS build setting defined in Pods/Target Support Files/Pods-swift-2048/Pods-swift-2048.debug.xcconfig. This can lead to problems with the CocoaPods installation", then make sure the Framework Search Paths in Build Settings for both Debug and Release only contain $(inherited).

    + +

    Code Integration #

    Now that we have a package foundation, we will actually modify the native application to integrate React Native into the application. For our 2048 app, we will add a "High Score" screen in React Native.

    The React Native component #

    The first bit of code we will write is the actual React Native code for the new "High Score" screen that will be integrated into our application.

    Create a index.ios.js file #

    First, create an empty index.ios.js file. For ease, I am doing this in the root of the project.

    index.ios.js is the starting point for React Native applications on iOS. And it is always required. It can be a small file that requires other file that are part of your React Native component or application, or it can contain all the code that is needed for it. In our case, we will just put everything in index.ios.js

    # In root of your project +$ touch index.ios.js

    Add Your React Native Code #

    In your index.ios.js, create your component. In our sample here, we will add simple <Text> component within a styled <View>

    'use strict'; + +import React from 'react'; +import { + AppRegistry, + StyleSheet, + Text, + View +} from 'react-native'; + +class RNHighScores extends React.Component { + render() { + var contents = this.props["scores"].map( + score => <Text key={score.name}>{score.name}:{score.value}{"\n"}</Text> + ); + return ( + <View style={styles.container}> + <Text style={styles.highScoresTitle}> + 2048 High Scores! + </Text> + <Text style={styles.scores}> + {contents} + </Text> + </View> + ); + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: '#FFFFFF', + }, + highScoresTitle: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, + scores: { + textAlign: 'center', + color: '#333333', + marginBottom: 5, + }, +}); + +// Module name +AppRegistry.registerComponent('RNHighScores', () => RNHighScores);

    RNHighScores is the name of your module that will be used when you add a view to React Native from within your iOS application.

    The Magic: RCTRootView #

    Now that your React Native component is created via index.ios.js, you need to add that component to a new or existing ViewController. The easiest path is to take is to optionally create an event path to your component and then add that component to an existing ViewController.

    We will tie our React Native component with a new native view in the ViewController that will actually host it called RCTRootView .

    Create an Event Path #

    You can add a new link on the main game menu to go to the "High Score" React Native page.

    Event Path

    Event Handler #

    We will now add an event handler from the menu link. A method will be added to the main ViewController of your application. This is where RCTRootView comes into play.

    When you build a React Native application, you use the React Native packager to create an index.ios.bundle that will be served by the React Native server. Inside index.ios.bundle will be our RNHighScore module. So, we need to point our RCTRootView to the location of the index.ios.bundle resource (via NSURL) and tie it to the module.

    We will, for debugging purposes, log that the event handler was invoked. Then, we will create a string with the location of our React Native code that exists inside the index.ios.bundle. Finally, we will create the main RCTRootView. Notice how we provide RNHighScores as the moduleName that we created above when writing the code for our React Native component.

    + +

    First import the RCTRootView library.

    #import "RCTRootView.h"

    The initialProperties are here for illustration purposes so we have some data for our high score screen. In our React Native component, we will use this.props to get access to that data.

    - (IBAction)highScoreButtonPressed:(id)sender { + NSLog(@"High Score Button Pressed"); + NSURL *jsCodeLocation = [NSURL + URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios"]; + RCTRootView *rootView = + [[RCTRootView alloc] initWithBundleURL : jsCodeLocation + moduleName : @"RNHighScores" + initialProperties : + @{ + @"scores" : @[ + @{ + @"name" : @"Alex", + @"value": @"42" + }, + @{ + @"name" : @"Joel", + @"value": @"10" + } + ] + } + launchOptions : nil]; + UIViewController *vc = [[UIViewController alloc] init]; + vc.view = rootView; + [self presentViewController:vc animated:YES completion:nil]; +}

    Note that RCTRootView initWithURL starts up a new JSC VM. To save resources and simplify the communication between RN views in different parts of your native app, you can have multiple views powered by React Native that are associated with a single JS runtime. To do that, instead of using [RCTRootView alloc] initWithURL, use RCTBridge initWithBundleURL to create a bridge and then use RCTRootView initWithBridge.

    + +

    First import the React library.

    import React

    The initialProperties are here for illustration purposes so we have some data for our high score screen. In our React Native component, we will use this.props to get access to that data.

    @IBAction func highScoreButtonTapped(sender : UIButton) { + NSLog("Hello") + let jsCodeLocation = NSURL(string: "http://localhost:8081/index.ios.bundle?platform=ios") + let mockData:NSDictionary = ["scores": + [ + ["name":"Alex", "value":"42"], + ["name":"Joel", "value":"10"] + ] + ] + + let rootView = RCTRootView( + bundleURL: jsCodeLocation, + moduleName: "RNHighScores", + initialProperties: mockData as [NSObject : AnyObject], + launchOptions: nil + ) + let vc = UIViewController() + vc.view = rootView + self.presentViewController(vc, animated: true, completion: nil) +}

    Note that RCTRootView bundleURL starts up a new JSC VM. To save resources and simplify the communication between RN views in different parts of your native app, you can have multiple views powered by React Native that are associated with a single JS runtime. To do that, instead of using RCTRootView bundleURL, use RCTBridge initWithBundleURL to create a bridge and then use RCTRootView initWithBridge.

    + +

    When moving your app to production, the NSURL can point to a pre-bundled file on disk via something like [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];. You can use the react-native-xcode.sh script in node_modules/react-native/packager/ to generate that pre-bundled file.

    + +

    When moving your app to production, the NSURL can point to a pre-bundled file on disk via something like let mainBundle = NSBundle(URLForResource: "main" withExtension:"jsbundle"). You can use the react-native-xcode.sh script in node_modules/react-native/packager/ to generate that pre-bundled file.

    + +

    Wire Up #

    Wire up the new link in the main menu to the newly added event handler method.

    Event Path

    One of the easier ways to do this is to open the view in the storyboard and right click on the new link. Select something such as the Touch Up Inside event, drag that to the storyboard and then select the created method from the list provided.

    Test Your Integration #

    You have now done all the basic steps to integrate React Native with your current application. Now we will start the React Native packager to build the index.ios.bundle packager and the server running on localhost to serve it.

    App Transport Security #

    Apple has blocked implicit cleartext HTTP resource loading. So we need to add the following our project's Info.plist (or equivalent) file.

    <key>NSAppTransportSecurity</key> +<dict> + <key>NSExceptionDomains</key> + <dict> + <key>localhost</key> + <dict> + <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> + <true/> + </dict> + </dict> +</dict>

    Run the Packager #

    # From the root of your project, where the `node_modules` directory is located. +$ npm start

    Run the App #

    If you are using Xcode or your favorite editor, build and run your native iOS application as normal. Alternatively, you can run the app from the command line using:

    # From the root of your project +$ react-native run-ios

    In our sample application, you should see the link to the "High Scores" and then when you click on that you will see the rendering of your React Native component.

    Here is the native application home screen:

    Home Screen

    Here is the React Native high score screen:

    High Scores

    If you are getting module resolution issues when running your application please see this GitHub issue for information and possible resolution. This comment seemed to be the latest possible resolution.

    See the Code #

    + +

    You can examine the code that added the React Native screen on GitHub.

    + +

    You can examine the code that added the React Native screen on GitHub.

    + +

    Add JS to your app #

    In your app's root folder, run:

    $ npm init +$ npm install --save react-native +$ curl -o .flowconfig https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig

    This creates a node module for your app and adds the react-native npm dependency. Now open the newly created package.json file and add this under scripts:

    "start": "node node_modules/react-native/local-cli/cli.js start"

    Copy & paste the following code to index.android.js in your root folder — it's a barebones React Native app:

    'use strict'; + +import React from 'react'; +import { + AppRegistry, + StyleSheet, + Text, + View +} from 'react-native'; + +class HelloWorld extends React.Component { + render() { + return ( + <View style={styles.container}> + <Text style={styles.hello}>Hello, World</Text> + </View> + ) + } +} +var styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + }, + hello: { + fontSize: 20, + textAlign: 'center', + margin: 10, + }, +}); + +AppRegistry.registerComponent('HelloWorld', () => HelloWorld);

    Prepare your current app #

    In your app's build.gradle file add the React Native dependency:

    compile "com.facebook.react:react-native:+" // From node_modules

    In your project's build.gradle file add an entry for the local React Native maven directory:

    allprojects { + repositories { + ... + maven { + // All of React Native (JS, Android binaries) is installed from npm + url "$rootDir/node_modules/react-native/android" + } + } + ... +}

    Next, make sure you have the Internet permission in your AndroidManifest.xml:

    <uses-permission android:name="android.permission.INTERNET" />

    This is only really used in dev mode when reloading JavaScript from the development server, so you can strip this in release builds if you need to.

    Add native code #

    You need to add some native code in order to start the React Native runtime and get it to render something. To do this, we're going to create an Activity that creates a ReactRootView, starts a React application inside it and sets it as the main content view.

    public class MyReactActivity extends Activity implements DefaultHardwareBackBtnHandler { + private ReactRootView mReactRootView; + private ReactInstanceManager mReactInstanceManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mReactRootView = new ReactRootView(this); + mReactInstanceManager = ReactInstanceManager.builder() + .setApplication(getApplication()) + .setBundleAssetName("index.android.bundle") + .setJSMainModuleName("index.android") + .addPackage(new MainReactPackage()) + .setUseDeveloperSupport(BuildConfig.DEBUG) + .setInitialLifecycleState(LifecycleState.RESUMED) + .build(); + mReactRootView.startReactApplication(mReactInstanceManager, "HelloWorld", null); + + setContentView(mReactRootView); + } + + @Override + public void invokeDefaultOnBackPressed() { + super.onBackPressed(); + } +}

    A ReactInstanceManager can be shared amongst multiple activities and/or fragments. You will want to make your own ReactFragment or ReactActivity and have a singleton holder that holds a ReactInstanceManager. When you need the ReactInstanceManager (e.g., to hook up the ReactInstanceManager to the lifecycle of those Activities or Fragments) use the one provided by the singleton.

    Next, we need to pass some activity lifecycle callbacks down to the ReactInstanceManager:

    @Override +protected void onPause() { + super.onPause(); + + if (mReactInstanceManager != null) { + mReactInstanceManager.onHostPause(); + } +} + +@Override +protected void onResume() { + super.onResume(); + + if (mReactInstanceManager != null) { + mReactInstanceManager.onHostResume(this, this); + } +} + +@Override +protected void onDestroy() { + super.onDestroy(); + + if (mReactInstanceManager != null) { + mReactInstanceManager.onHostDestroy(); + } +}

    We also need to pass back button events to React Native:

    @Override + public void onBackPressed() { + if (mReactInstanceManager != null) { + mReactInstanceManager.onBackPressed(); + } else { + super.onBackPressed(); + } +}

    This allows JavaScript to control what happens when the user presses the hardware back button (e.g. to implement navigation). When JavaScript doesn't handle a back press, your invokeDefaultOnBackPressed method will be called. By default this simply finishes your Activity.

    Finally, we need to hook up the dev menu. By default, this is activated by (rage) shaking the device, but this is not very useful in emulators. So we make it show when you press the hardware menu button:

    @Override +public boolean onKeyUp(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_MENU && mReactInstanceManager != null) { + mReactInstanceManager.showDevOptionsDialog(); + return true; + } + return super.onKeyUp(keyCode, event); +}

    That's it, your activity is ready to run some JavaScript code.

    Run your app #

    To run your app, you need to first start the development server. To do this, simply run the following command in your root folder:

    $ npm start

    Now build and run your Android app as normal (e.g. ./gradlew installDebug). Once you reach your React-powered activity inside the app, it should load the JavaScript code from the development server and display:

    Screenshot

    +

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/intentandroid.html b/docs/intentandroid.html index 132108caeff..45ce87da6d1 100644 --- a/docs/intentandroid.html +++ b/docs/intentandroid.html @@ -1,4 +1,4 @@ -IntentAndroid – React Native | A framework for building native apps using React

    IntentAndroid #

    Edit on GitHub

    NOTE: IntentAndroid is being deprecated. Use Linking instead.

    IntentAndroid gives you a general interface to handle external links.

    Basic Usage #

    Handling deep links #

    If your app was launched from an external url registered to your app you can +IntentAndroid – React Native | A framework for building native apps using React

    IntentAndroid #

    Edit on GitHub

    NOTE: IntentAndroid is being deprecated. Use Linking instead.

    IntentAndroid gives you a general interface to handle external links.

    Basic Usage #

    Handling deep links #

    If your app was launched from an external url registered to your app you can access and handle it from any component you want with

    componentDidMount() { var url = IntentAndroid.getInitialURL(url => { if (url) { @@ -25,12 +25,12 @@ More Info: } else { IntentAndroid.openURL(url); } -});

    Methods #

    static openURL(url) #

    Starts a corresponding external activity for the given URL.

    For example, if the URL is "https://www.facebook.com", the system browser will be opened, +});

    Methods #

    static openURL(url) #

    Starts a corresponding external activity for the given URL.

    For example, if the URL is "https://www.facebook.com", the system browser will be opened, or the "choose application" dialog will be shown.

    You can use other URLs, like a location (e.g. "geo:37.484847,-122.148386"), a contact, or any other URL that can be opened with {@code Intent.ACTION_VIEW}.

    NOTE: This method will fail if the system doesn't know how to open the specified URL. -If you're passing in a non-http(s) URL, it's best to check {@code canOpenURL} first.

    NOTE: For web URLs, the protocol ("http://", "https://") must be set accordingly!

    @deprecated

    static canOpenURL(url, callback) #

    Determine whether or not an installed app can handle a given URL.

    You can use other URLs, like a location (e.g. "geo:37.484847,-122.148386"), a contact, -or any other URL that can be opened with {@code Intent.ACTION_VIEW}.

    NOTE: For web URLs, the protocol ("http://", "https://") must be set accordingly!

    @param URL the URL to open

    @deprecated

    static getInitialURL(callback) #

    If the app launch was triggered by an app link with {@code Intent.ACTION_VIEW}, -it will give the link url, otherwise it will give null

    Refer http://developer.android.com/training/app-indexing/deep-linking.html#handling-intents

    @deprecated

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/interactionmanager.html b/docs/interactionmanager.html index e689c8b04de..78b351b4785 100644 --- a/docs/interactionmanager.html +++ b/docs/interactionmanager.html @@ -1,4 +1,4 @@ -InteractionManager – React Native | A framework for building native apps using React

    InteractionManager #

    Edit on GitHub

    InteractionManager allows long-running work to be scheduled after any +InteractionManager – React Native | A framework for building native apps using React

    InteractionManager #

    Edit on GitHub

    InteractionManager allows long-running work to be scheduled after any interactions/animations have completed. In particular, this allows JavaScript animations to run smoothly.

    Applications can schedule tasks to run after interactions with the following:

    InteractionManager.runAfterInteractions(() => { // ...long-running synchronous task... @@ -20,9 +20,10 @@ earlier.

    By default, queued tasks are executed together in a loop in one tasks will only be executed until the deadline (in terms of js event loop run time) approaches, at which point execution will yield via setTimeout, allowing events such as touches to start interactions and block queued tasks -from executing, making apps more responsive.

    Methods #

    static runAfterInteractions(task) #

    Schedule a function to run after all interactions have completed.

    static createInteractionHandle() #

    Notify manager that an interaction has started.

    static clearInteractionHandle(handle) #

    Notify manager that an interaction has completed.

    static setDeadline(deadline) #

    A positive number will use setTimeout to schedule any tasks after the +from executing, making apps more responsive.

    Methods #

    static runAfterInteractions(task) #

    Schedule a function to run after all interactions have completed. Returns a cancellable +"promise".

    static createInteractionHandle(0) #

    Notify manager that an interaction has started.

    static clearInteractionHandle(handle) #

    Notify manager that an interaction has completed.

    static setDeadline(deadline) #

    A positive number will use setTimeout to schedule any tasks after the eventLoopRunningTime hits the deadline value, otherwise all tasks will be -executed in one setImmediate batch (default).

    Properties #

    Events: CallExpression #

    addListener: CallExpression #

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/javascript-environment.html b/docs/javascript-environment.html index 3196070fbd1..e656106d9ca 100644 --- a/docs/javascript-environment.html +++ b/docs/javascript-environment.html @@ -1,4 +1,4 @@ -JavaScript Environment – React Native | A framework for building native apps using React

    JavaScript Environment #

    Edit on GitHub

    JavaScript Runtime #

    When using React Native, you're going to be running your JavaScript code in two environments:

    • On iOS simulators and devices, Android emulators and devices React Native uses JavaScriptCore which is the JavaScript engine that powers Safari. On iOS JSC doesn't use JIT due to the absence of writable executable memory in iOS apps.
    • When using Chrome debugging, it runs all the JavaScript code within Chrome itself and communicates with native code via WebSocket. So you are using V8.

    While both environments are very similar, you may end up hitting some inconsistencies. We're likely going to experiment with other JS engines in the future, so it's best to avoid relying on specifics of any runtime.

    JavaScript Syntax Transformers #

    Syntax transformers make writing code more enjoyable by allowing you to use new JavaScript syntax without having to wait for support on all interpreters.

    As of version 0.5.0, React Native ships with the Babel JavaScript compiler. Check Babel documentation on its supported transformations for more details.

    Here's a full list of React Native's enabled transformations.

    ES5

    • Reserved Words: promise.catch(function() { });

    ES6

    ES7

    Specific

    • JSX: <View style={{color: 'red'}} />
    • Flow: function foo(x: ?number): string {}

    Polyfills #

    Many standards functions are also available on all the supported JavaScript runtimes.

    Browser

    ES6

    ES7

    Specific

    • __DEV__

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.

    JavaScript Environment #

    Edit on GitHub

    JavaScript Runtime #

    When using React Native, you're going to be running your JavaScript code in two environments:

    • On iOS simulators and devices, Android emulators and devices React Native uses JavaScriptCore which is the JavaScript engine that powers Safari. On iOS JSC doesn't use JIT due to the absence of writable executable memory in iOS apps.
    • When using Chrome debugging, it runs all the JavaScript code within Chrome itself and communicates with native code via WebSocket. So you are using V8.

    While both environments are very similar, you may end up hitting some inconsistencies. We're likely going to experiment with other JS engines in the future, so it's best to avoid relying on specifics of any runtime.

    JavaScript Syntax Transformers #

    Syntax transformers make writing code more enjoyable by allowing you to use new JavaScript syntax without having to wait for support on all interpreters.

    As of version 0.5.0, React Native ships with the Babel JavaScript compiler. Check Babel documentation on its supported transformations for more details.

    Here's a full list of React Native's enabled transformations.

    ES5

    • Reserved Words: promise.catch(function() { });

    ES6

    ES7

    Specific

    • JSX: <View style={{color: 'red'}} />
    • Flow: function foo(x: ?number): string {}

    Polyfills #

    Many standards functions are also available on all the supported JavaScript runtimes.

    Browser

    ES6

    ES7

    Specific

    • __DEV__

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/known-issues.html b/docs/known-issues.html deleted file mode 100644 index cf6e323ff74..00000000000 --- a/docs/known-issues.html +++ /dev/null @@ -1,21 +0,0 @@ -Known Issues – React Native | A framework for building native apps using React

    Known Issues #

    Edit on GitHub

    Devtools "React" Tab Does Not Work #

    It's currently not possible to use the "React" tab in the devtools to inspect app widgets. This is due to a change in how the application scripts are evaluated in the devtools plugin; they are now run inside a Web Worker, and the plugin is unaware of this and so unable to communicate properly with React Native.

    However, you can still use the Console feature of the devtools, and debugging JavaScript with breakpoints works too. To use the console, make sure to select the ⚙debuggerWorker.js entry in the devtools dropdown that by default is set to <top frame>.

    Missing Android Modules and Views #

    The work on React Native for Android started later than React Native for iOS. Most views and modules are now available on Android, with the following exceptions:

    Views #

    • Maps - Please use Leland Richardson's react-native-maps as it is more feature-complete than our internal implementation.

    Modules #

    Some props are only supported on one platform #

    There are properties that work on one platform only, either because they can inherently only be supported on that platform or because they haven't been implemented on the other platforms yet. All of these are annotated with @platform in JS docs and have a small badge next to them on the website. See e.g. Image.

    Platform parity #

    There are known cases where the APIs could be made more consistent across iOS and Android:

    • <ViewPagerAndroid> and <ScrollView pagingEnabled={true}> on iOS do a similar thing. We might want to unify them to <ViewPager>.
    • ActivityIndicator could render a native spinning indicator on both platforms (currently this is done using ActivityIndicatorIOS on iOS and ProgressBarAndroid on Android).
    • ProgressBar could render a horizontal progress bar on both platforms (on iOS this is ProgressViewIOS, on Android it's ProgressBarAndroid).

    The overflow style property defaults to hidden and cannot be changed on Android #

    This is a result of how Android rendering works. This feature is not being worked on as it would be a significant undertaking and there are many more important tasks.

    Another issue with overflow: 'hidden' on Android: a view is not clipped by the parent's borderRadius even if the parent has overflow: 'hidden' enabled – the corners of the inner view will be visible outside of the rounded corners. This is only on Android; it works as expected on iOS. See a demo of the bug and the corresponding issue.

    View shadows #

    The shadow* view styles apply on iOS, and the elevation view prop is available on Android. Setting elevation on Android is equivalent to using the native elevation API, and has the same limitations (most significantly, it only works on Android 5.0+). Setting elevation on Android also affects the z-order for overlapping views.

    Android M permissions #

    The open source version of React Native doesn't yet support the Android M permission model.

    Layout-only nodes on Android #

    An optimization feature of the Android version of React Native is for views which only contribute to the layout to not have a native view, only their layout properties are propagated to their children views. This optimization is to provide stability in deep view hierarchies for React Native and is therefore enabled by default. Should you depend on a view being present or internal tests incorrectly detect a view is layout only it will be necessary to turn off this behavior. To do this, set collapsable to false as in this example:

    <View collapsable={false}> - ... -</View>

    Memory issues with PNG images #

    React Native Android depends on Fresco for loading and displaying images. Currently we have disabled downsampling because it is experimental, so you may run into memory issues when loading large PNG images.

    react-native init hangs #

    Try running react-native init with --verbose and see #2797 for common causes.

    Text Input Border #

    The text input has by default a border at the bottom of its view. This border has its padding set by the background image provided by the system, and it cannot be changed. Solutions to avoid this is to either not set height explicitly, case in which the system will take care of displaying the border in the correct position, or to not display the border by setting underlineColorAndroid to transparent.

    iOS App Transport Security and loading HTTP resources #

    As of iOS 9, new Xcode projects enable App Transport Security by default, which rejects all HTTP requests that are not sent over HTTPS. This can result in HTTP traffic being blocked (including the developer React Native server) with the following console errors:

    App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
    NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

    See our guide for running on an iOS device and working around the ATS issues, or several community posts on handling common cases like whitelisting specific domains for non-HTTPS traffic.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/layout-props.html b/docs/layout-props.html new file mode 100644 index 00000000000..5279518bf66 --- /dev/null +++ b/docs/layout-props.html @@ -0,0 +1,127 @@ +Layout Props – React Native | A framework for building native apps using React

    Layout Props #

    Edit on GitHub

    Props #

    alignItems enum('flex-start', 'flex-end', 'center', 'stretch') #

    alignItems aligns children in the cross direction. + For example, if children are flowing vertically, alignItems + controls how they align horizontally. + It works like align-items in CSS, except the default value + is stretch instead of flex-start. See + https://css-tricks.com/almanac/properties/a/align-items/ + for more detail.

    alignSelf enum('auto', 'flex-start', 'flex-end', 'center', 'stretch') #

    alignSelf controls how a child aligns in the cross direction, + overriding the alignItems of the parent. It works like align-self + in CSS. See + https://css-tricks.com/almanac/properties/a/align-self/ + for more detail.

    borderBottomWidth number #

    borderBottomWidth works like border-bottom-width in CSS. +See http://www.w3schools.com/cssref/pr_border-bottom_width.asp +for more details.

    borderLeftWidth number #

    borderLeftWidth works like border-left-width in CSS. +See http://www.w3schools.com/cssref/pr_border-bottom_width.asp +for more details.

    borderRightWidth number #

    borderRightWidth works like border-right-width in CSS. +See http://www.w3schools.com/cssref/pr_border-right_width.asp +for more details.

    borderTopWidth number #

    borderTopWidth works like border-top-width in CSS. +See http://www.w3schools.com/cssref/pr_border-top_width.asp +for more details.

    borderWidth number #

    borderWidth works like border-width in CSS. +See http://www.w3schools.com/cssref/pr_border-width.asp +for more details.

    bottom number #

    bottom is the number of logical pixels to offset the bottom edge of + this component.

    It works similarly to bottom in CSS, but in React Native you must + use logical pixel units, rather than percents, ems, or any of that.

    See https://developer.mozilla.org/en-US/docs/Web/CSS/bottom + for more details of how top affects layout.

    flex number #

    In React Native flex does not work the same way that it does in CSS. + flex is a number rather than a string, and it works + according to the css-layout library + at https://github.com/facebook/css-layout .

    When flex is a positive number, it makes the component flexible + and it will be sized proportional to its flex value. So a + component with flex set to 2 will take twice the space as a + component with flex set to 1.

    When flex is 0, the component is sized according to width + and height and it is inflexible.

    When flex is -1, the component is normally sized according + width and height. However, if there's not enough space, + the component will shrink to its minWidth and minHeight.

    flexDirection enum('row', 'row-reverse', 'column', 'column-reverse') #

    flexDirection controls which directions children of a container go. + row goes left to right, column goes top to bottom, and you may + be able to guess what the other two do. It works like flex-direction + in CSS, except the default is column. See + https://css-tricks.com/almanac/properties/f/flex-direction/ + for more detail.

    flexWrap enum('wrap', 'nowrap') #

    flexWrap controls whether children can wrap around after they + hit the end of a flex container. + It works like flex-wrap in CSS. See + https://css-tricks.com/almanac/properties/f/flex-wrap/ + for more detail.

    height number #

    height sets the height of this component.

    It works similarly to height in CSS, but in React Native you + must use logical pixel units, rather than percents, ems, or any of that. + See http://www.w3schools.com/cssref/pr_dim_width.asp for more details.

    justifyContent enum('flex-start', 'flex-end', 'center', 'space-between', 'space-around') #

    justifyContent aligns children in the main direction. + For example, if children are flowing vertically, justifyContent + controls how they align vertically. + It works like justify-content in CSS. See + https://css-tricks.com/almanac/properties/j/justify-content/ + for more detail.

    left number #

    left is the number of logical pixels to offset the left edge of + this component.

    It works similarly to left in CSS, but in React Native you must + use logical pixel units, rather than percents, ems, or any of that.

    See https://developer.mozilla.org/en-US/docs/Web/CSS/left + for more details of how left affects layout.

    margin number #

    Setting margin has the same effect as setting each of + marginTop, marginLeft, marginBottom, and marginRight.

    marginBottom number #

    marginBottom works like margin-bottom in CSS. + See http://www.w3schools.com/cssref/pr_margin-bottom.asp + for more details.

    marginHorizontal number #

    Setting marginHorizontal has the same effect as setting + both marginLeft and marginRight.

    marginLeft number #

    marginLeft works like margin-left in CSS. + See http://www.w3schools.com/cssref/pr_margin-left.asp + for more details.

    marginRight number #

    marginRight works like margin-right in CSS. + See http://www.w3schools.com/cssref/pr_margin-right.asp + for more details.

    marginTop number #

    marginTop works like margin-top in CSS. + See http://www.w3schools.com/cssref/pr_margin-top.asp + for more details.

    marginVertical number #

    Setting marginVertical has the same effect as setting both + marginTop and marginBottom.

    maxHeight number #

    maxHeight is the maximum height for this component, in logical pixels.

    It works similarly to max-height in CSS, but in React Native you + must use logical pixel units, rather than percents, ems, or any of that.

    See http://www.w3schools.com/cssref/pr_dim_max-height.asp + for more details.

    maxWidth number #

    maxWidth is the maximum width for this component, in logical pixels.

    It works similarly to max-width in CSS, but in React Native you + must use logical pixel units, rather than percents, ems, or any of that.

    See http://www.w3schools.com/cssref/pr_dim_max-width.asp + for more details.

    minHeight number #

    minHeight is the minimum height for this component, in logical pixels.

    It works similarly to min-height in CSS, but in React Native you + must use logical pixel units, rather than percents, ems, or any of that.

    See http://www.w3schools.com/cssref/pr_dim_min-height.asp + for more details.

    minWidth number #

    minWidth is the minimum width for this component, in logical pixels.

    It works similarly to min-width in CSS, but in React Native you + must use logical pixel units, rather than percents, ems, or any of that.

    See http://www.w3schools.com/cssref/pr_dim_min-width.asp + for more details.

    padding number #

    padding works like padding in CSS. + It's like setting each of paddingTop, paddingBottom, + paddingLeft, and paddingRight to the same thing. + See http://www.w3schools.com/css/css_padding.asp + for more details.

    paddingBottom number #

    paddingBottom works like padding-bottom in CSS. +See http://www.w3schools.com/cssref/pr_padding-bottom.asp +for more details.

    paddingHorizontal number #

    Setting paddingHorizontal is like setting both of + paddingLeft and paddingRight.

    paddingLeft number #

    paddingLeft works like padding-left in CSS. +See http://www.w3schools.com/cssref/pr_padding-left.asp +for more details.

    paddingRight number #

    paddingRight works like padding-right in CSS. +See http://www.w3schools.com/cssref/pr_padding-right.asp +for more details.

    paddingTop number #

    paddingTop works like padding-top in CSS. +See http://www.w3schools.com/cssref/pr_padding-top.asp +for more details.

    paddingVertical number #

    Setting paddingVertical is like setting both of + paddingTop and paddingBottom.

    position enum('absolute', 'relative') #

    position in React Native is similar to regular CSS, but + everything is set to relative by default, so absolute + positioning is always just relative to the parent.

    If you want to position a child using specific numbers of logical + pixels relative to its parent, set the child to have absolute + position.

    If you want to position a child relative to something + that is not its parent, just don't use styles for that. Use the + component tree.

    See https://github.com/facebook/css-layout + for more details on how position differs between React Native + and CSS.

    right number #

    right is the number of logical pixels to offset the right edge of + this component.

    It works similarly to right in CSS, but in React Native you must + use logical pixel units, rather than percents, ems, or any of that.

    See https://developer.mozilla.org/en-US/docs/Web/CSS/right + for more details of how right affects layout.

    top number #

    top is the number of logical pixels to offset the top edge of + this component.

    It works similarly to top in CSS, but in React Native you must + use logical pixel units, rather than percents, ems, or any of that.

    See https://developer.mozilla.org/en-US/docs/Web/CSS/top + for more details of how top affects layout.

    width number #

    width sets the width of this component.

    It works similarly to width in CSS, but in React Native you + must use logical pixel units, rather than percents, ems, or any of that. + See http://www.w3schools.com/cssref/pr_dim_width.asp for more details.

    zIndex number #

    zIndex controls which components display on top of others. + Normally, you don't use zIndex. Components render according to + their order in the document tree, so later components draw over + earlier ones. zIndex may be useful if you have animations or custom + modal interfaces where you don't want this behavior.

    It works like the CSS z-index property - components with a larger + zIndex will render on top. Think of the z-direction like it's + pointing from the phone into your eyeball. See + https://developer.mozilla.org/en-US/docs/Web/CSS/z-index for + more detail.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/layoutanimation.html b/docs/layoutanimation.html index 347eaa7d243..f64c1604b06 100644 --- a/docs/layoutanimation.html +++ b/docs/layoutanimation.html @@ -1,9 +1,9 @@ -LayoutAnimation – React Native | A framework for building native apps using React

    LayoutAnimation #

    Edit on GitHub

    Automatically animates views to their new positions when the +LayoutAnimation – React Native | A framework for building native apps using React

    LayoutAnimation #

    Edit on GitHub

    Automatically animates views to their new positions when the next layout happens.

    A common way to use this API is to call LayoutAnimation.configureNext -before calling setState.

    Methods #

    static configureNext(config, onAnimationDidEnd?) #

    Schedules an animation to happen on the next layout.

    @param config Specifies animation properties:

    • duration in milliseconds
    • create, config for animating in new views (see Anim type)
    • update, config for animating views that have been updated +before calling setState.

    Methods #

    static configureNext(config, onAnimationDidEnd?) #

    Schedules an animation to happen on the next layout.

    @param config Specifies animation properties:

    • duration in milliseconds
    • create, config for animating in new views (see Anim type)
    • update, config for animating views that have been updated (see Anim type)

    @param onAnimationDidEnd Called when the animation finished. Only supported on iOS. -@param onError Called on error. Only supported on iOS.

    static create(duration, type, creationProp) #

    Helper for creating a config for configureNext.

    Properties #

    Types: CallExpression #

    Properties: CallExpression #

    configChecker: CallExpression #

    Presets: ObjectExpression #

    easeInEaseOut: CallExpression #

    linear: CallExpression #

    spring: CallExpression #

    Examples #

    Edit on GitHub
    'use strict'; +@param onError Called on error. Only supported on iOS.

    static create(duration, type, creationProp) #

    Helper for creating a config for configureNext.

    Properties #

    Types: CallExpression #

    Properties: CallExpression #

    configChecker: CallExpression #

    Presets: ObjectExpression #

    easeInEaseOut: CallExpression #

    linear: CallExpression #

    spring: CallExpression #

    Examples #

    Edit on GitHub
    'use strict'; const React = require('react'); const ReactNative = require('react-native'); @@ -158,7 +158,7 @@ exports.examples render(): ReactElement<any> { return <CrossFadeExample />; }, -}];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/linking-libraries-ios.html b/docs/linking-libraries-ios.html index 0ece13c27db..c4ae507e4f7 100644 --- a/docs/linking-libraries-ios.html +++ b/docs/linking-libraries-ios.html @@ -1,4 +1,4 @@ -Linking Libraries – React Native | A framework for building native apps using React

    Linking Libraries #

    Edit on GitHub

    Not every app uses all the native capabilities, and including the code to support +Linking Libraries – React Native | A framework for building native apps using React

    Linking Libraries #

    Edit on GitHub

    Not every app uses all the native capabilities, and including the code to support all those features would impact the binary size... But we still want to make it easy to add these features whenever you need them.

    With that in mind we exposed many of these features as independent static libraries.

    For most of the libs it will be as simple as dragging two files, sometimes a third step will be necessary, but no more than that.

    All the libraries we ship with React Native live on the Libraries folder in @@ -19,7 +19,7 @@ received.

    For that we need to know the library's headers. To achieve to your project's file, select Build Settings and search for Header Search Paths. There you should include the path to your library (if it has relevant files on subdirectories remember to make it recursive, like React on the -example).

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/linking.html b/docs/linking.html index 4e25dea12ec..4071f284e69 100644 --- a/docs/linking.html +++ b/docs/linking.html @@ -1,4 +1,4 @@ -Linking – React Native | A framework for building native apps using React

    Linking #

    Edit on GitHub

    Linking gives you a general interface to interact with both incoming +Linking – React Native | A framework for building native apps using React

    Linking #

    Edit on GitHub

    Linking gives you a general interface to interact with both incoming and outgoing app links.

    Basic Usage #

    Handling deep links #

    If your app was launched from an external url registered to your app you can access and handle it from any component you want with

    componentDidMount() { var url = Linking.getInitialURL().then((url) => { @@ -46,12 +46,12 @@ execution you'll need to add the following lines to you *AppDelegate. } else { return Linking.openURL(url); } -}).catch(err => console.error('An error occurred', err));

    Methods #

    constructor() #

    addEventListener(type, handler) #

    Add a handler to Linking changes by listening to the url event type -and providing the handler

    removeEventListener(type, handler) #

    Remove a handler by passing the url event type and the handler

    openURL(url) #

    Try to open the given url with any of the installed apps.

    You can use other URLs, like a location (e.g. "geo:37.484847,-122.148386"), a contact, +}).catch(err => console.error('An error occurred', err));

    Methods #

    constructor(0) #

    addEventListener(type, handler) #

    Add a handler to Linking changes by listening to the url event type +and providing the handler

    removeEventListener(type, handler) #

    Remove a handler by passing the url event type and the handler

    openURL(url) #

    Try to open the given url with any of the installed apps.

    You can use other URLs, like a location (e.g. "geo:37.484847,-122.148386"), a contact, or any other URL that can be opened with the installed apps.

    NOTE: This method will fail if the system doesn't know how to open the specified URL. -If you're passing in a non-http(s) URL, it's best to check {@code canOpenURL} first.

    NOTE: For web URLs, the protocol ("http://", "https://") must be set accordingly!

    canOpenURL(url) #

    Determine whether or not an installed app can handle a given URL.

    NOTE: For web URLs, the protocol ("http://", "https://") must be set accordingly!

    NOTE: As of iOS 9, your app needs to provide the LSApplicationQueriesSchemes key -inside Info.plist or canOpenURL will always return false.

    @param URL the URL to open

    getInitialURL() #

    If the app launch was triggered by an app link, -it will give the link url, otherwise it will give null

    NOTE: To support deep linking on Android, refer http://developer.android.com/training/app-indexing/deep-linking.html#handling-intents

    Examples #

    Edit on GitHub
    'use strict'; +If you're passing in a non-http(s) URL, it's best to check {@code canOpenURL} first.

    NOTE: For web URLs, the protocol ("http://", "https://") must be set accordingly!

    canOpenURL(url) #

    Determine whether or not an installed app can handle a given URL.

    NOTE: For web URLs, the protocol ("http://", "https://") must be set accordingly!

    NOTE: As of iOS 9, your app needs to provide the LSApplicationQueriesSchemes key +inside Info.plist or canOpenURL will always return false.

    @param URL the URL to open

    getInitialURL(0) #

    If the app launch was triggered by an app link, +it will give the link url, otherwise it will give null

    NOTE: To support deep linking on Android, refer http://developer.android.com/training/app-indexing/deep-linking.html#handling-intents

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -130,7 +130,7 @@ it will give the link url, otherwise it will give null

    NOTE: }, }); -module.exports = IntentAndroidExample;

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/listview.html b/docs/listview.html index 4429a8ba9a6..8bd24f12bbb 100644 --- a/docs/listview.html +++ b/docs/listview.html @@ -1,4 +1,4 @@ -ListView – React Native | A framework for building native apps using React

    ListView #

    Edit on GitHub

    ListView - A core component designed for efficient display of vertically +ListView – React Native | A framework for building native apps using React

    ListView #

    Edit on GitHub

    ListView - A core component designed for efficient display of vertically scrolling lists of changing data. The minimal API is to create a ListView.DataSource, populate it with a simple array of data blobs, and instantiate a ListView component with that data @@ -67,7 +67,7 @@ pixels.

    Methods #

    getMetrics() #

    Exports some data, e.g. for perf investigations or analytics.

    scrollTo(...args) #

    Scrolls to a given x, y offset, either immediately or with a smooth animation.

    See ScrollView#scrollTo.

    Examples #

    Edit on GitHub
    'use strict'; +with horizontal={true}.

    Methods #

    getMetrics(0) #

    Exports some data, e.g. for perf investigations or analytics.

    scrollTo(...args) #

    Scrolls to a given x, y offset, either immediately or with a smooth animation.

    See ScrollView#scrollTo.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -208,7 +208,7 @@ with horizontal={true}.

    }, }); -module.exports = ListViewSimpleExample;

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/listviewdatasource.html b/docs/listviewdatasource.html index cdb1174b007..5bc9f685c1d 100644 --- a/docs/listviewdatasource.html +++ b/docs/listviewdatasource.html @@ -1,4 +1,4 @@ -ListViewDataSource – React Native | A framework for building native apps using React

    ListViewDataSource #

    Edit on GitHub

    Provides efficient data processing and access to the +ListViewDataSource – React Native | A framework for building native apps using React

    ListViewDataSource #

    Edit on GitHub

    Provides efficient data processing and access to the ListView component. A ListViewDataSource is created with functions for extracting data from the input blob, and comparing elements (with default implementations for convenience). The input blob can be as simple as an @@ -20,10 +20,10 @@ it.

    getInitialStatethis.setState({ ds: this.state.ds.cloneWithRows(this._data) }); -}

    Methods #

    constructor(params) #

    You can provide custom extraction and hasChanged functions for section +}

    Methods #

    constructor(params) #

    You can provide custom extraction and hasChanged functions for section headers and rows. If absent, data will be extracted with the defaultGetRowData and defaultGetSectionHeaderData functions.

    The default extractor expects data of one of the following forms:

    { sectionID_1: { rowID_1: <rowData1>, ... }, ... }

    or

    { sectionID_1: [ <rowData1>, <rowData2>, ... ], ... }

    or

    [ [ <rowData1>, <rowData2>, ... ], ... ]

    The constructor takes in a params argument that can contain any of the -following:

    • getRowData(dataBlob, sectionID, rowID);
    • getSectionHeaderData(dataBlob, sectionID);
    • rowHasChanged(prevRowData, nextRowData);
    • sectionHeaderHasChanged(prevSectionData, nextSectionData);

    cloneWithRows(dataBlob, rowIdentities) #

    Clones this ListViewDataSource with the specified dataBlob and +following:

    • getRowData(dataBlob, sectionID, rowID);
    • getSectionHeaderData(dataBlob, sectionID);
    • rowHasChanged(prevRowData, nextRowData);
    • sectionHeaderHasChanged(prevSectionData, nextSectionData);

    cloneWithRows(dataBlob, rowIdentities) #

    Clones this ListViewDataSource with the specified dataBlob and rowIdentities. The dataBlob is just an arbitrary blob of data. At construction an extractor to get the interesting information was defined (or the default was used).

    The rowIdentities is a 2D array of identifiers for rows. @@ -32,13 +32,13 @@ assumed that the keys of the section data are the row identities.

    Note: Th passes the functions defined at construction to a new data source with the data specified. If you wish to maintain the existing data you must handle merging of old and new data separately and then pass that into -this function as the dataBlob.

    cloneWithRowsAndSections(dataBlob, sectionIdentities, rowIdentities) #

    This performs the same function as the cloneWithRows function but here +this function as the dataBlob.

    cloneWithRowsAndSections(dataBlob, sectionIdentities, rowIdentities) #

    This performs the same function as the cloneWithRows function but here you also specify what your sectionIdentities are. If you don't care about sections you should safely be able to use cloneWithRows.

    sectionIdentities is an array of identifiers for sections. ie. ['s1', 's2', ...]. If not provided, it's assumed that the -keys of dataBlob are the section identities.

    Note: this returns a new object!

    getRowCount() #

    getRowAndSectionCount() #

    rowShouldUpdate(sectionIndex, rowIndex) #

    Returns if the row is dirtied and needs to be rerendered

    getRowData(sectionIndex, rowIndex) #

    Gets the data required to render the row.

    getRowIDForFlatIndex(index) #

    Gets the rowID at index provided if the dataSource arrays were flattened, -or null of out of range indexes.

    getSectionIDForFlatIndex(index) #

    Gets the sectionID at index provided if the dataSource arrays were flattened, -or null for out of range indexes.

    getSectionLengths() #

    Returns an array containing the number of rows in each section

    sectionHeaderShouldUpdate(sectionIndex) #

    Returns if the section header is dirtied and needs to be rerendered

    getSectionHeaderData(sectionIndex) #

    Gets the data required to render the section header

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/mapview.html b/docs/mapview.html index 3245ad98738..9bf5b382785 100644 --- a/docs/mapview.html +++ b/docs/mapview.html @@ -1,18 +1,19 @@ -MapView – React Native | A framework for building native apps using React

    MapView #

    Edit on GitHub

    Props #

    onAnnotationPress function #

    Deprecated. Use annotation onFocus and onBlur instead.

    onRegionChange function #

    Callback that is called continuously when the user is dragging the map.

    onRegionChangeComplete function #

    Callback that is called once, when the user is done moving the map.

    pitchEnabled bool #

    When this property is set to true and a valid camera is associated -with the map, the camera’s pitch angle is used to tilt the plane -of the map. When this property is set to false, the camera’s pitch -angle is ignored and the map is always displayed as if the user -is looking straight down onto it.

    region {latitude: number, longitude: number, latitudeDelta: number, longitudeDelta: number} #

    The region to be displayed by the map.

    The region is defined by the center coordinates and the span of -coordinates to display.

    rotateEnabled bool #

    When this property is set to true and a valid camera is associated with -the map, the camera’s heading angle is used to rotate the plane of the -map around its center point. When this property is set to false, the -camera’s heading angle is ignored and the map is always oriented so -that true north is situated at the top of the map view

    scrollEnabled bool #

    If false the user won't be able to change the map region being displayed. -Default value is true.

    showsUserLocation bool #

    If true the app will ask for the user's location and display it on -the map. Default value is false.

    NOTE: on iOS, you need to add the NSLocationWhenInUseUsageDescription -key in Info.plist to enable geolocation, otherwise it will fail silently.

    style View#style #

    Used to style and layout the MapView. See StyleSheet.js and -ViewStylePropTypes.js for more info.

    zoomEnabled bool #

    If false the user won't be able to pinch/zoom the map. -Default value is true.

    androidactive bool #

    iosannotations [{latitude: number, longitude: number, animateDrop: bool, draggable: bool, onDragStateChange: function, onFocus: function, onBlur: function, title: string, subtitle: string, leftCalloutView: element, rightCalloutView: element, detailCalloutView: element, tintColor: [object Object], image: Image.propTypes.source, view: element, id: string, hasLeftCallout: deprecatedPropType( +MapView – React Native | A framework for building native apps using React

    MapView #

    Edit on GitHub

    This component is only supported on iOS.

    MapView is used to display embeddable maps and annotations using +MKMapView.

    For a cross-platform solution, check out +react-native-maps +by Leland Richardson.

    import React, { Component } from 'react'; +import { MapView } from 'react-native'; + +class MapMyRide extends Component { + render() { + return ( + <MapView + style={{height: 200, margin: 40}} + showsUserLocation={true} + /> + ); + } +}

    Props #

    annotations [{latitude: number, longitude: number, animateDrop: bool, draggable: bool, onDragStateChange: function, onFocus: function, onBlur: function, title: string, subtitle: string, leftCalloutView: element, rightCalloutView: element, detailCalloutView: element, tintColor: [object Object], image: Image.propTypes.source, view: element, id: string, hasLeftCallout: deprecatedPropType( React.PropTypes.bool, 'Use `leftCalloutView` instead.' ), hasRightCallout: deprecatedPropType( @@ -24,12 +25,24 @@ Default value is true.

    #

    Map annotations with title/subtitle.

    iosfollowUserLocation bool #

    If true the map will follow the user's location whenever it changes. +)}] #

    Map annotations with title and subtitle.

    followUserLocation bool #

    If true the map will follow the user's location whenever it changes. Note that this has no effect unless showsUserLocation is enabled. -Default value is true.

    ioslegalLabelInsets {top: number, left: number, bottom: number, right: number} #

    Insets for the map's legal label, originally at bottom left of the map. -See EdgeInsetsPropType.js for more information.

    iosmapType enum('standard', 'satellite', 'hybrid') #

    The map type to be displayed.

    • standard: standard road map (default)
    • satellite: satellite view
    • hybrid: satellite view with roads and points of interest overlaid

    iosmaxDelta number #

    Maximum size of area that can be displayed.

    iosminDelta number #

    Minimum size of area that can be displayed.

    iosoverlays [{coordinates: [object Object], lineWidth: number, strokeColor: [object Object], fillColor: [object Object], id: string}] #

    Map overlays

    iosshowsCompass bool #

    If false compass won't be displayed on the map. -Default value is true.

    iosshowsPointsOfInterest bool #

    If false points of interest won't be displayed on the map. -Default value is true.

    Examples #

    Edit on GitHub
    'use strict'; +Default value is true.

    legalLabelInsets {top: number, left: number, bottom: number, right: number} #

    Insets for the map's legal label, originally at bottom left of the map.

    mapType enum('standard', 'satellite', 'hybrid') #

    The map type to be displayed.

    • standard: Standard road map (default).
    • satellite: Satellite view.
    • hybrid: Satellite view with roads and points of interest overlaid.

    maxDelta number #

    Maximum size of the area that can be displayed.

    minDelta number #

    Minimum size of the area that can be displayed.

    onAnnotationPress function #

    Deprecated. Use annotation onFocus and onBlur instead.

    onRegionChange function #

    Callback that is called continuously when the user is dragging the map.

    onRegionChangeComplete function #

    Callback that is called once, when the user is done moving the map.

    overlays [{coordinates: [object Object], lineWidth: number, strokeColor: [object Object], fillColor: [object Object], id: string}] #

    Map overlays

    pitchEnabled bool #

    When this property is set to true and a valid camera is associated +with the map, the camera’s pitch angle is used to tilt the plane +of the map.

    When this property is set to false, the camera’s pitch +angle is ignored and the map is always displayed as if the user +is looking straight down onto it.

    region {latitude: number, longitude: number, latitudeDelta: number, longitudeDelta: number} #

    The region to be displayed by the map.

    The region is defined by the center coordinates and the span of +coordinates to display.

    rotateEnabled bool #

    When this property is set to true and a valid camera is associated with +the map, the camera’s heading angle is used to rotate the plane of the +map around its center point.

    When this property is set to false, the +camera’s heading angle is ignored and the map is always oriented so +that true north is situated at the top of the map view

    scrollEnabled bool #

    If false the user won't be able to change the map region being displayed. +Default value is true.

    showsCompass bool #

    If false, compass won't be displayed on the map. +Default value is true.

    showsPointsOfInterest bool #

    If false points of interest won't be displayed on the map. +Default value is true.

    showsUserLocation bool #

    If true the app will ask for the user's location and display it on +the map. Default value is false.

    NOTE: You'll need to add the NSLocationWhenInUseUsageDescription +key in Info.plist to enable geolocation, otherwise it will fail silently.

    style View#style #

    Used to style and layout the MapView.

    zoomEnabled bool #

    If false the user won't be able to pinch/zoom the map. +Default value is true.

    androidactive bool #

    Type Definitions #

    AnnotationDragState #

    State an annotation on the map.

    Type:
    $Enum

    Constants:
    ValueDescription
    idle

    Annotation is not being touched.

    starting

    Annotation dragging has began.

    dragging

    Annotation is being dragged.

    canceling

    Annotation dragging is being canceled.

    ending

    Annotation dragging has ended.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -268,6 +281,56 @@ Default value is true.

    }); +var DraggableAnnotationExample = React.createClass({ + + createAnnotation(longitude, latitude){ + return{ + longitude, + latitude, + draggable:true, + onDragStateChange:(event)=>{ + if(event.state ==='idle'){ + this.setState({ + annotations:[this.createAnnotation(event.longitude, event.latitude)], + }); + } + console.log('Drag state: '+ event.state); + }, + }; + }, + + getInitialState(){ + return{ + isFirstLoad:true, + annotations:[], + mapRegion: undefined, + }; + }, + + render(){ + if(this.state.isFirstLoad){ + var onRegionChangeComplete =(region)=>{ + //When the MapView loads for the first time, we can create the annotation at the + //region that was loaded. +this.setState({ + isFirstLoad:false, + annotations:[this.createAnnotation(region.longitude, region.latitude)], + }); + }; + } + + return( + <MapView + style={styles.map} + onRegionChangeComplete={onRegionChangeComplete} + region={this.state.mapRegion} + annotations={this.state.annotations} + /> + ); + }, + +}); + var styles = StyleSheet.create({ map:{ height:150, @@ -354,12 +417,7 @@ exports.examples { title:'Draggable pin',render(){ - return <AnnotationExample style={styles.map} annotation={{ - draggable:true, - onDragStateChange:(event)=>{ - console.log('Drag state: '+ event.state); - }, - }}/>; + return <DraggableAnnotationExample/>;}},{ @@ -421,7 +479,7 @@ exports.examples />;}}, -];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/modal.html b/docs/modal.html index 6f72f60a3fc..6c467981c46 100644 --- a/docs/modal.html +++ b/docs/modal.html @@ -1,10 +1,51 @@ -Modal – React Native | A framework for building native apps using React

    Modal #

    Edit on GitHub

    A Modal component covers the native view (e.g. UIViewController, Activity) -that contains the React Native root.

    Use Modal in hybrid apps that embed React Native; Modal allows the portion of -your app written in React Native to present content above the enclosing -native view hierarchy.

    In apps written with React Native from the root view down, you should use -Navigator instead of Modal. With a top-level Navigator, you have more control -over how to present the modal scene over the rest of your app by using the -configureScene property.

    Props #

    animated bool #

    Deprecated

    Use the animationType prop instead.

    animationType enum('none', 'slide', 'fade') #

    onRequestClose Platform.OS === 'android' ? PropTypes.func.isRequired : PropTypes.func #

    onShow function #

    transparent bool #

    visible bool #

    Examples #

    Edit on GitHub
    'use strict'; +Modal – React Native | A framework for building native apps using React

    Modal #

    Edit on GitHub

    The Modal component is a simple way to present content above an enclosing view.

    Note: If you need more control over how to present modals over the rest of your app, +then consider using a top-level Navigator. Go here to compare navigation options.

    import React, { Component } from 'react'; +import { Modal, Text, TouchableHighlight, View } from 'react-native'; + +class ModalExample extends Component { + + constructor(props) { + super(props); + this.state = {modalVisible: false}; + } + + setModalVisible(visible) { + this.setState({modalVisible: visible}); + } + + render() { + return ( + <View style={{marginTop: 22}}> + <Modal + animationType={"slide"} + transparent={false} + visible={this.state.modalVisible} + onRequestClose={() => {alert("Modal has been closed.")}} + > + <View style={{marginTop: 22}}> + <View> + <Text>Hello World!</Text> + + <TouchableHighlight onPress={() => { + this.setModalVisible(!this.state.modalVisible) + }}> + <Text>Hide Modal</Text> + </TouchableHighlight> + + </View> + </View> + </Modal> + + <TouchableHighlight onPress={() => { + this.setModalVisible(true) + }}> + <Text>Show Modal</Text> + </TouchableHighlight> + + </View> + ); + } +}

    Props #

    animated bool #

    Deprecated

    Use the animationType prop instead.

    animationType enum('none', 'slide', 'fade') #

    The animationType prop controls how the modal animates.

    • slide slides in from the bottom
    • fade fades into view
    • none appears without an animation

    onRequestClose Platform.OS === 'android' ? PropTypes.func.isRequired : PropTypes.func #

    The onRequestClose prop allows passing a function that will be called once the modal has been dismissed.

    On the Android platform, this is a required function.

    onShow function #

    The onShow prop allows passing a function that will be called once the modal has been shown.

    transparent bool #

    The transparent prop determines whether your modal will fill the entire view. Setting this to true will render the modal over a transparent background.

    visible bool #

    The visible prop determines whether your modal is visible.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -175,7 +216,7 @@ exports.examples : { marginTop: 10, }, -});
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/more-resources.html b/docs/more-resources.html new file mode 100644 index 00000000000..0eda067bce4 --- /dev/null +++ b/docs/more-resources.html @@ -0,0 +1,19 @@ +More Resources – React Native | A framework for building native apps using React

    More Resources #

    Edit on GitHub

    If you just read through this website, you should be able to build a pretty cool React Native app. But React Native isn't just a product made by one company - it's a community of thousands of developers. So if you're interested in React Native, here's some related stuff you might want to check out.

    Popular Libraries #

    If you're using React Native, you probably already know about React. So I feel a bit silly mentioning this. But if you haven't, check out React - it's the best way to build a modern website.

    One common question is how to handle the "state" of your React Native application. The most popular library for this is Redux. Don't be afraid of how often Redux uses the word "reducer" - it's a pretty simple library, and there's also a nice series of videos explaining it.

    If you're looking for a library that does a specific thing, check out Awesome React Native, a curated list of components that also has demos, articles, and other stuff.

    Example Apps #

    There are a lot of example apps at the React Native Playground. You can see the code running on a real device, which is a neat feature.

    The folks who built the app for Facebook's F8 conference in 2016 also open-sourced the code and wrote up a detailed series of tutorials. This is useful if you want a more in-depth example that's more realistic than most sample apps out there.

    Development Tools #

    Nuclide is the IDE that Facebook uses internally for React Native development. The killer feature of Nuclide is its debugging ability. It also has great inline Flow support.

    Ignite is a starter kit that uses Redux and a few different common UI libraries. It has a CLI to generate apps, components, and containers. If you like all of the individual tech choices, Ignite could be perfect for you.

    CodePush is a service from Microsoft that makes it easy to deploy live updates to your React Native app. If you don't like going through the app store process to deploy little tweaks, and you also don't like setting up your own backend, give CodePush a try.

    Exponent is a development environment plus application that focuses on letting you build React Native apps in the Exponent development environment, without ever touching Xcode or Android Studio. If you wish React Native was even more JavaScripty and webby, check out Exponent.

    Deco is an all-in-one development environment specifically designed for React Native. It can automatically set up a new project, search for open source components, and insert them. You can also tweak your app graphically in real time. Check it out if you use macOS.

    Where React Native People Hang Out #

    The React Native Community Facebook group has thousands of developers, and it's pretty active. Come there to show off your project, or ask how other people solved similar problems.

    Reactiflux is a Discord chat where a lot of React-related discussion happens, including React Native. Discord is just like Slack except it works better for open source projects with a zillion contributors. Check out the #react-native channel.

    The React Twitter account covers both React and React Native. Following that account is a pretty good way to find out what's happening in the world of React.

    There are a lot of React Native Meetups that happen around the world. Often there is React Native content in React meetups as well.

    Sometimes we have React conferences. We posted the videos from React.js Conf 2016, and we'll probably have more conferences in the future, too. Stay tuned.

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/native-components-android.html b/docs/native-components-android.html index 3babd6de8cb..aa713ee71f9 100644 --- a/docs/native-components-android.html +++ b/docs/native-components-android.html @@ -1,4 +1,4 @@ -Native UI Components – React Native | A framework for building native apps using React

    Native UI Components #

    Edit on GitHub

    There are tons of native UI widgets out there ready to be used in the latest apps - some of them are part of the platform, others are available as third-party libraries, and still more might be in use in your very own portfolio. React Native has several of the most critical platform components already wrapped, like ScrollView and TextInput, but not all of them, and certainly not ones you might have written yourself for a previous app. Fortunately, it's quite easy to wrap up these existing components for seamless integration with your React Native application.

    Like the native module guide, this too is a more advanced guide that assumes you are somewhat familiar with Android SDK programming. This guide will show you how to build a native UI component, walking you through the implementation of a subset of the existing ImageViewcomponent available in the core React Native library.

    ImageView example #

    For this example we are going to walk through the implementation requirements to allow the use of ImageViews in JavaScript.

    Native views are created and manipulated by extending ViewManager or more commonly SimpleViewManager . A SimpleViewManager is convenient in this case because it applies common properties such as background color, opacity, and Flexbox layout.

    These subclasses are essentially singletons - only one instance of each is created by the bridge. They vend native views to the NativeViewHierarchyManager, which delegates back to them to set and update the properties of the views as necessary. The ViewManagers are also typically the delegates for the views, sending events back to JavaScript via the bridge.

    Vending a view is simple:

    1. Create the ViewManager subclass.
    2. Implement the createViewInstance method
    3. Expose view property setters using @ReactProp (or @ReactPropGroup) annotation
    4. Register the manager in createViewManagers of the applications package.
    5. Implement the JavaScript module

    1. Create the ViewManager subclass #

    In this example we create view manager class ReactImageManager that extends SimpleViewManager of type ReactImageView. ReactImageView is the type of object managed by the manager, this will be the custom native view. Name returned by getName is used to reference the native view type from JavaScript.

    ... +Native UI Components – React Native | A framework for building native apps using React

    Native UI Components #

    Edit on GitHub

    There are tons of native UI widgets out there ready to be used in the latest apps - some of them are part of the platform, others are available as third-party libraries, and still more might be in use in your very own portfolio. React Native has several of the most critical platform components already wrapped, like ScrollView and TextInput, but not all of them, and certainly not ones you might have written yourself for a previous app. Fortunately, it's quite easy to wrap up these existing components for seamless integration with your React Native application.

    Like the native module guide, this too is a more advanced guide that assumes you are somewhat familiar with Android SDK programming. This guide will show you how to build a native UI component, walking you through the implementation of a subset of the existing ImageViewcomponent available in the core React Native library.

    ImageView example #

    For this example we are going to walk through the implementation requirements to allow the use of ImageViews in JavaScript.

    Native views are created and manipulated by extending ViewManager or more commonly SimpleViewManager . A SimpleViewManager is convenient in this case because it applies common properties such as background color, opacity, and Flexbox layout.

    These subclasses are essentially singletons - only one instance of each is created by the bridge. They vend native views to the NativeViewHierarchyManager, which delegates back to them to set and update the properties of the views as necessary. The ViewManagers are also typically the delegates for the views, sending events back to JavaScript via the bridge.

    Vending a view is simple:

    1. Create the ViewManager subclass.
    2. Implement the createViewInstance method
    3. Expose view property setters using @ReactProp (or @ReactPropGroup) annotation
    4. Register the manager in createViewManagers of the applications package.
    5. Implement the JavaScript module

    1. Create the ViewManager subclass #

    In this example we create view manager class ReactImageManager that extends SimpleViewManager of type ReactImageView. ReactImageView is the type of object managed by the manager, this will be the custom native view. Name returned by getName is used to reference the native view type from JavaScript.

    ... public class ReactImageManager extends SimpleViewManager<ReactImageView> { @@ -58,7 +58,8 @@ module.exports }

    The event name topChange maps to the onChange callback prop in JavaScript (mappings are in UIManagerModuleConstants.java). This callback is invoked with the raw event, which we typically process in the wrapper component to make a simpler API:

    // MyCustomView.js class MyCustomView extends React.Component { - constructor() { + constructor(props) { + super(props); this._onChange = this._onChange.bind(this); } _onChange(event: Event) { @@ -81,7 +82,7 @@ MyCustomView.propTypes var RCTMyCustomView = requireNativeComponent(`RCTMyCustomView`, MyCustomView, { nativeOnly: {onChange: true} -});

    Note the use of nativeOnly above. Sometimes you'll have some special properties that you need to expose for the native component, but don't actually want them as part of the API for the associated React component. For example, Switch has a custom onChange handler for the raw native event, and exposes an onValueChange handler property that is invoked with just the boolean value rather than the raw event (similar to onChangeMessage in the example above). Since you don't want these native only properties to be part of the API, you don't want to put them in propTypes, but if you don't you'll get an error. The solution is simply to call them out via the nativeOnly option.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/native-components-ios.html b/docs/native-components-ios.html index bd4c2ad8d92..0d34e5179e4 100644 --- a/docs/native-components-ios.html +++ b/docs/native-components-ios.html @@ -1,4 +1,4 @@ -Native UI Components – React Native | A framework for building native apps using React

    Native UI Components #

    Edit on GitHub

    There are tons of native UI widgets out there ready to be used in the latest apps - some of them are part of the platform, others are available as third-party libraries, and still more might be in use in your very own portfolio. React Native has several of the most critical platform components already wrapped, like ScrollView and TextInput, but not all of them, and certainly not ones you might have written yourself for a previous app. Fortunately, it's quite easy to wrap up these existing components for seamless integration with your React Native application.

    Like the native module guide, this too is a more advanced guide that assumes you are somewhat familiar with iOS programming. This guide will show you how to build a native UI component, walking you through the implementation of a subset of the existing MapView component available in the core React Native library.

    iOS MapView example #

    Let's say we want to add an interactive Map to our app - might as well use MKMapView, we just need to make it usable from JavaScript.

    Native views are created and manipulated by subclasses of RCTViewManager. These subclasses are similar in function to view controllers, but are essentially singletons - only one instance of each is created by the bridge. They vend native views to the RCTUIManager, which delegates back to them to set and update the properties of the views as necessary. The RCTViewManagers are also typically the delegates for the views, sending events back to JavaScript via the bridge.

    Vending a view is simple:

    • Create the basic subclass.
    • Add the RCT_EXPORT_MODULE() marker macro.
    • Implement the -(UIView *)view method.
    // RCTMapManager.m +Native UI Components – React Native | A framework for building native apps using React

    Native UI Components #

    Edit on GitHub

    There are tons of native UI widgets out there ready to be used in the latest apps - some of them are part of the platform, others are available as third-party libraries, and still more might be in use in your very own portfolio. React Native has several of the most critical platform components already wrapped, like ScrollView and TextInput, but not all of them, and certainly not ones you might have written yourself for a previous app. Fortunately, it's quite easy to wrap up these existing components for seamless integration with your React Native application.

    Like the native module guide, this too is a more advanced guide that assumes you are somewhat familiar with iOS programming. This guide will show you how to build a native UI component, walking you through the implementation of a subset of the existing MapView component available in the core React Native library.

    iOS MapView example #

    Let's say we want to add an interactive Map to our app - might as well use MKMapView, we just need to make it usable from JavaScript.

    Native views are created and manipulated by subclasses of RCTViewManager. These subclasses are similar in function to view controllers, but are essentially singletons - only one instance of each is created by the bridge. They vend native views to the RCTUIManager, which delegates back to them to set and update the properties of the views as necessary. The RCTViewManagers are also typically the delegates for the views, sending events back to JavaScript via the bridge.

    Vending a view is simple:

    • Create the basic subclass.
    • Add the RCT_EXPORT_MODULE() marker macro.
    • Implement the -(UIView *)view method.
    // RCTMapManager.m #import <MapKit/MapKit.h> #import "RCTViewManager.h" @@ -247,7 +247,7 @@ import { UIManager "datetime": @(UIDatePickerModeDateAndTime), } }; -}

    This guide covered many of the aspects of bridging over custom native components, but there is even more you might need to consider, such as custom hooks for inserting and laying out subviews. If you want to go even deeper, check out the actual RCTMapManager and other components in the source code.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/native-modules-android.html b/docs/native-modules-android.html index 2aec12f52c6..c82340967d6 100644 --- a/docs/native-modules-android.html +++ b/docs/native-modules-android.html @@ -1,4 +1,4 @@ -Native Modules – React Native | A framework for building native apps using React

    Native Modules #

    Edit on GitHub

    Sometimes an app needs access to a platform API that React Native doesn't have a corresponding module for yet. Maybe you want to reuse some existing Java code without having to reimplement it in JavaScript, or write some high performance, multi-threaded code such as for image processing, a database, or any number of advanced extensions.

    We designed React Native such that it is possible for you to write real native code and have access to the full power of the platform. This is a more advanced feature and we don't expect it to be part of the usual development process, however it is essential that it exists. If React Native doesn't support a native feature that you need, you should be able to build it yourself.

    The Toast Module #

    This guide will use the Toast example. Let's say we would like to be able to create a toast message from JavaScript.

    We start by creating a native module. A native module is a Java class that usually extends the ReactContextBaseJavaModule class and implements the functionality required by the JavaScript. Our goal here is to be able to write ToastAndroid.show('Awesome', ToastAndroid.SHORT); from JavaScript to display a short toast on the screen.

    package com.facebook.react.modules.toast; +Native Modules – React Native | A framework for building native apps using React

    Native Modules #

    Edit on GitHub

    Sometimes an app needs access to a platform API that React Native doesn't have a corresponding module for yet. Maybe you want to reuse some existing Java code without having to reimplement it in JavaScript, or write some high performance, multi-threaded code such as for image processing, a database, or any number of advanced extensions.

    We designed React Native such that it is possible for you to write real native code and have access to the full power of the platform. This is a more advanced feature and we don't expect it to be part of the usual development process, however it is essential that it exists. If React Native doesn't support a native feature that you need, you should be able to build it yourself.

    The Toast Module #

    This guide will use the Toast example. Let's say we would like to be able to create a toast message from JavaScript.

    We start by creating a native module. A native module is a Java class that usually extends the ReactContextBaseJavaModule class and implements the functionality required by the JavaScript. Our goal here is to be able to write ToastAndroid.show('Awesome', ToastAndroid.SHORT); from JavaScript to display a short toast on the screen.

    package com.facebook.react.modules.toast; import android.widget.Toast; @@ -263,7 +263,7 @@ public void onHostPauseonHostDestroy() { // Actvity `onDestroy` -}

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/native-modules-ios.html b/docs/native-modules-ios.html index 516ce327217..d3e4b58ab71 100644 --- a/docs/native-modules-ios.html +++ b/docs/native-modules-ios.html @@ -1,4 +1,4 @@ -Native Modules – React Native | A framework for building native apps using React

    Native Modules #

    Edit on GitHub

    Sometimes an app needs access to platform API, and React Native doesn't have a corresponding module yet. Maybe you want to reuse some existing Objective-C, Swift or C++ code without having to reimplement it in JavaScript, or write some high performance, multi-threaded code such as for image processing, a database, or any number of advanced extensions.

    We designed React Native such that it is possible for you to write real native code and have access to the full power of the platform. This is a more advanced feature and we don't expect it to be part of the usual development process, however it is essential that it exists. If React Native doesn't support a native feature that you need, you should be able to build it yourself.

    This is a more advanced guide that shows how to build a native module. It assumes the reader knows Objective-C or Swift and core libraries (Foundation, UIKit).

    iOS Calendar Module Example #

    This guide will use the iOS Calendar API example. Let's say we would like to be able to access the iOS calendar from JavaScript.

    A native module is just an Objective-C class that implements the RCTBridgeModule protocol. If you are wondering, RCT is an abbreviation of ReaCT.

    // CalendarManager.h +Native Modules – React Native | A framework for building native apps using React

    Native Modules #

    Edit on GitHub

    Sometimes an app needs access to platform API, and React Native doesn't have a corresponding module yet. Maybe you want to reuse some existing Objective-C, Swift or C++ code without having to reimplement it in JavaScript, or write some high performance, multi-threaded code such as for image processing, a database, or any number of advanced extensions.

    We designed React Native such that it is possible for you to write real native code and have access to the full power of the platform. This is a more advanced feature and we don't expect it to be part of the usual development process, however it is essential that it exists. If React Native doesn't support a native feature that you need, you should be able to build it yourself.

    This is a more advanced guide that shows how to build a native module. It assumes the reader knows Objective-C or Swift and core libraries (Foundation, UIKit).

    iOS Calendar Module Example #

    This guide will use the iOS Calendar API example. Let's say we would like to be able to access the iOS calendar from JavaScript.

    A native module is just an Objective-C class that implements the RCTBridgeModule protocol. If you are wondering, RCT is an abbreviation of ReaCT.

    // CalendarManager.h #import "RCTBridgeModule.h" @interface CalendarManager : NSObject <RCTBridgeModule> @@ -12,7 +12,7 @@ RCTLogInfo(@"Pretending to create an event %@ at %@", name, location); }

    Now, from your JavaScript file you can call the method like this:

    import { NativeModules } from 'react-native'; var CalendarManager = NativeModules.CalendarManager; -CalendarManager.addEvent('Birthday Party', '4 Privet Drive, Surrey');

    NOTE: JavaScript method names

    The name of the method exported to JavaScript is the native method's name up to the first colon. React Native also defines a macro called RCT_REMAP_METHOD() to specify the JavaScript method's name. This is useful when multiple native methods are the same up to the first colon and would have conflicting JavaScript names.

    The CalendarManager module is instantiated on the Objective-C side using a [CalendarManager new] call. The return type of bridge methods is always void. React Native bridge is asynchronous, so the only way to pass a result to JavaScript is by using callbacks or emitting events (see below).

    Argument Types #

    RCT_EXPORT_METHOD supports all standard JSON object types, such as:

    • string (NSString)
    • number (NSInteger, float, double, CGFloat, NSNumber)
    • boolean (BOOL, NSNumber)
    • array (NSArray) of any types from this list
    • map (NSDictionary) with string keys and values of any type from this list
    • function (RCTResponseSenderBlock)

    But it also works with any type that is supported by the RCTConvert class (see RCTConvert for details). The RCTConvert helper functions all accept a JSON value as input and map it to a native Objective-C type or class.

    In our CalendarManager example, we need to pass the event date to the native method. We can't send JavaScript Date objects over the bridge, so we need to convert the date to a string or number. We could write our native function like this:

    RCT_EXPORT_METHOD(addEvent:(NSString *)name location:(NSString *)location date:(NSNumber *)secondsSinceUnixEpoch) +CalendarManager.addEvent('Birthday Party', '4 Privet Drive, Surrey');

    NOTE: JavaScript method names

    The name of the method exported to JavaScript is the native method's name up to the first colon. React Native also defines a macro called RCT_REMAP_METHOD() to specify the JavaScript method's name. This is useful when multiple native methods are the same up to the first colon and would have conflicting JavaScript names.

    The CalendarManager module is instantiated on the Objective-C side using a [CalendarManager new] call. The return type of bridge methods is always void. React Native bridge is asynchronous, so the only way to pass a result to JavaScript is by using callbacks or emitting events (see below).

    Argument Types #

    RCT_EXPORT_METHOD supports all standard JSON object types, such as:

    • string (NSString)
    • number (NSInteger, float, double, CGFloat, NSNumber)
    • boolean (BOOL, NSNumber)
    • array (NSArray) of any types from this list
    • object (NSDictionary) with string keys and values of any type from this list
    • function (RCTResponseSenderBlock)

    But it also works with any type that is supported by the RCTConvert class (see RCTConvert for details). The RCTConvert helper functions all accept a JSON value as input and map it to a native Objective-C type or class.

    In our CalendarManager example, we need to pass the event date to the native method. We can't send JavaScript Date objects over the bridge, so we need to convert the date to a string or number. We could write our native function like this:

    RCT_EXPORT_METHOD(addEvent:(NSString *)name location:(NSString *)location date:(NSNumber *)secondsSinceUnixEpoch) { NSDate *date = [RCTConvert NSDate:secondsSinceUnixEpoch]; }

    or like this:

    RCT_EXPORT_METHOD(addEvent:(NSString *)name location:(NSString *)location date:(NSString *)ISO8601DateString) @@ -136,7 +136,7 @@ class CalendarManagerRCT_EXTERN_METHOD(addEvent:(NSString *)name location:(NSString *)location date:(nonnull NSNumber *)date) @end

    For those of you new to Swift and Objective-C, whenever you mix the two languages in an iOS project, you will also need an additional bridging file, known as a bridging header, to expose the Objective-C files to Swift. Xcode will offer to create this header file for you if you add your Swift file to your app through the Xcode File>New File menu option. You will need to import RCTBridgeModule.h in this header file.

    // CalendarManager-Bridging-Header.h -#import "RCTBridgeModule.h"

    You can also use RCT_EXTERN_REMAP_MODULE and RCT_EXTERN_REMAP_METHOD to alter the JavaScript name of the module or methods you are exporting. For more information see RCTBridgeModule.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/nativemethodsmixin.html b/docs/nativemethodsmixin.html index 0534efc31fb..e59c6466e03 100644 --- a/docs/nativemethodsmixin.html +++ b/docs/nativemethodsmixin.html @@ -1,25 +1,25 @@ -NativeMethodsMixin – React Native | A framework for building native apps using React

    NativeMethodsMixin #

    Edit on GitHub

    NativeMethodsMixin provides methods to access the underlying native +NativeMethodsMixin – React Native | A framework for building native apps using React

    NativeMethodsMixin #

    Edit on GitHub

    NativeMethodsMixin provides methods to access the underlying native component directly. This can be useful in cases when you want to focus a view or measure its on-screen dimensions, for example.

    The methods described here are available on most of the default components provided by React Native. Note, however, that they are not available on composite components that aren't directly backed by a native view. This will generally include most components that you define in your own app. For more information, see Direct -Manipulation.

    Methods #

    static measure(callback) #

    Determines the location on screen, width, and height of the given view and +Manipulation.

    Methods #

    static measure(callback) #

    Determines the location on screen, width, and height of the given view and returns the values via an async callback. If successful, the callback will be called with the following arguments:

    • x
    • y
    • width
    • height
    • pageX
    • pageY

    Note that these measurements are not available until after the rendering has been completed in native. If you need the measurements as soon as possible, consider using the onLayout -prop instead.

    static measureInWindow(callback) #

    Determines the location of the given view in the window and returns the +prop instead.

    static measureInWindow(callback) #

    Determines the location of the given view in the window and returns the values via an async callback. If the React root view is embedded in another native view, this will give you the absolute coordinates. If successful, the callback will be called with the following arguments:

    • x
    • y
    • width
    • height

    Note that these measurements are not available until after the rendering -has been completed in native.

    static measureLayout(relativeToNativeNode, onSuccess, onFail) #

    Like measure(), but measures the view relative an ancestor, +has been completed in native.

    static measureLayout(relativeToNativeNode, onSuccess, onFail) #

    Like measure(), but measures the view relative an ancestor, specified as relativeToNativeNode. This means that the returned x, y are relative to the origin x, y of the ancestor view.

    As always, to obtain a native node handle for a component, you can use -React.findNodeHandle(component).

    static focus() #

    Requests focus for the given input or view. The exact behavior triggered -will depend on the platform and type of view.

    static blur() #

    Removes focus from an input or view. This is the opposite of focus().

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/navigator-comparison.html b/docs/navigator-comparison.html index d85fcbbbfd1..cb8510a811a 100644 --- a/docs/navigator-comparison.html +++ b/docs/navigator-comparison.html @@ -1,18 +1,280 @@ -Navigator Comparison – React Native | A framework for building native apps using React

    Navigator Comparison #

    Edit on GitHub

    The differences between Navigator -and NavigatorIOS are a common -source of confusion for newcomers.

    Both Navigator and NavigatorIOS are components that allow you to -manage the navigation in your app between various "scenes" (another word -for screens). They manage a route stack and allow you to pop, push, and -replace states. In this way, they are similar to the html5 history -API. -The primary distinction between the two is that NavigatorIOS leverages -the iOS -UINavigationController -class, and Navigator re-implements that functionality entirely in -JavaScript as a React component. A corollary of this is that Navigator -will be compatible with Android and iOS, whereas NavigatorIOS will -only work on the one platform. Below is an itemized list of differences -between the two.

    Navigator #

    • Extensive API makes it completely customizable from JavaScript.
    • Under active development from the React Native team.
    • Written in JavaScript.
    • Works on iOS and Android.
    • Includes a simple navigation bar component similar to the default NavigatorIOS bar: Navigator.NavigationBar, and another with breadcrumbs called Navigator.BreadcrumbNavigationBar. See the UIExplorer demo to try them out and see how to use them.
      • Currently animations are good and improving, but they are still less refined than Apple's, which you get from NavigatorIOS.
    • You can provide your own navigation bar by passing it through the navigationBar prop.

    NavigatorIOS #

    • Small, limited API makes it much less customizable than Navigator in its current form.
    • Development belongs to open-source community - not used by the React Native team on their apps.
      • A result of this is that there is currently a backlog of unresolved bugs, nobody who uses this has stepped up to take ownership for it yet.
      • You may find an alternative in the community project react-native-navigation which replaces NavigatorIOS.
    • Wraps UIKit, so it works exactly the same as it would on another native app. Lives in Objective-C and JavaScript.
      • Consequently, you get the animations and behavior that Apple has developed.
    • iOS only.
    • Includes a navigation bar by default; this navigation bar is not a React Native view component and the style can only be slightly modified.

    For most non-trivial apps, you will want to use Navigator - it won't be long before you run into issues when trying to do anything complex with NavigatorIOS.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.

    Navigation #

    Edit on GitHub

    Mobile apps rarely consist of just one scene (another word for screen). As soon as you add a second scene to your app, you will have to take into consideration how the user will navigate from one scene to the other.

    You can use navigators to transition between multiple scenes. These transitions can be typical side-to-side animations down a master/detail stack, or vertical modal popups.

    Navigator #

    React Native has several built-in navigation components, but for your first app you will probably want to use Navigator. It provides a JavaScript implementation of a navigation stack, so it works on both iOS and Android and is easy to customize.

    Something you will encounter a lot when dealing with navigation is the concept of routes. A route is an object that contains information about a scene. It is used to provide all the context that the navigator's renderScene function needs to render a scene. A basic Navigator implementation may look like this:

    <Navigator + initialRoute={{ title: 'My Initial Scene', index: 0 }} + renderScene={(route, navigator) => { + <MyScene title={route.title} /> + }} +/>

    The above example will display a single scene, but in order to push a new scene onto screen you will need to learn about push and pop. These two methods are provided by the navigator object that is passed to your renderScene function. They can be used, as you may have realized, to push and pop routes into your navigation stack.

    A more complete example that demonstrates the pushing and popping of routes could therefore look something like this:

    import React, { Component, PropTypes } from 'react'; +import { Navigator, Text, TouchableHighlight, View } from 'react-native'; + +export default class SimpleNavigationApp extends Component { + render() { + return ( + <Navigator + initialRoute={{ title: 'My Initial Scene', index: 0 }} + renderScene={(route, navigator) => + <MyScene + title={route.title} + + // Function to call when a new scene should be displayed + onForward={ () => { + const nextIndex = route.index + 1; + navigator.push({ + title: 'Scene ' + nextIndex, + index: nextIndex, + }); + }} + + // Function to call to go back to the previous scene + onBack={() => { + if (route.index > 0) { + navigator.pop(); + } + }} + /> + } + /> + ) + } +} + +class MyScene extends Component { + static propTypes = { + title: PropTypes.string.isRequired, + onForward: PropTypes.func.isRequired, + onBack: PropTypes.func.isRequired, + } + render() { + return ( + <View> + <Text>Current Scene: { this.props.title }</Text> + <TouchableHighlight onPress={this.props.onForward}> + <Text>Tap me to load the next scene</Text> + </TouchableHighlight> + <TouchableHighlight onPress={this.props.onBack}> + <Text>Tap me to go back</Text> + </TouchableHighlight> + </View> + ) + } +}

    In this example, the MyScene component is passed the title of the current route via the title prop. It displays two tappable components that call the onForward and onBack functions passed through its props, which in turn will call navigator.push() and navigator.pop() as needed.

    While this is a very basic example, it can easily be adapted to render an entirely different component based on the route that is passed to the renderScene function. Navigator will push new scenes from the right by default, and you can control this behavior by using the configureScene function. You can also configure a navigation bar through the navigationBar prop.

    Check out the Navigator API reference for more code samples.

    NavigatorIOS #

    If you are targeting iOS only, you may also want to consider using NavigatorIOS. It looks and feels just like UINavigationController, because it is actually built on top of it.

    <NavigatorIOS + initialRoute={{ + component: MyScene, + title: 'My Initial Scene', + passProps: { myProp: 'foo' }, + }} +/>

    Just like Navigator, NavigatorIOS uses routes to represent scenes, with some important differences. The actual component that will be rendered can be specified using the component key in the route, and any props that should be passed to this component can be specified in passProps. A "navigator" object is automatically passed as a prop to the component, allowing you to call push and pop as needed.

    As NavigatorIOS leverages native UIKit navigation, it will automatically render a navigation bar with a back button and title.

    Check out the NavigatorIOS reference docs to learn more about this component.

    import React, { Component, PropTypes } from 'react'; +import { NavigatorIOS, Text, TouchableHighlight, View } from 'react-native'; + +export default class NavigatorIOSApp extends Component { + render() { + return ( + <NavigatorIOS + initialRoute={{ + component: MyScene, + title: 'My Initial Scene', + }} + style={{flex: 1}} + /> + ) + } +} + +class MyScene extends Component { + static propTypes = { + title: PropTypes.string.isRequired, + navigator: PropTypes.object.isRequired, + } + + constructor(props, context) { + super(props, context); + this._onForward = this._onForward.bind(this); + } + + _onForward() { + this.props.navigator.push({ + title: 'Scene ' + nextIndex, + }); + } + + render() { + return ( + <View> + <Text>Current Scene: { this.props.title }</Text> + <TouchableHighlight onPress={this._onForward}> + <Text>Tap me to load the next scene</Text> + </TouchableHighlight> + </View> + ) + } +}

    You may also want to check out react-native-navigation, a component that aims to provide native navigation on both iOS and Android.

    NavigationExperimental #

    Navigator and NavigatorIOS are both stateful components. If your app has multiple of these, it can become tricky to coordinate navigation transitions between them. NavigationExperimental provides a different approach to navigation, allowing any view to act as a navigation view and using reducers to manipulate state at a top-level object. It is bleeding edge as the name implies, but you might want to check it out if you are craving greater control over your app's navigation.

    <NavigationCardStack + onNavigateBack={onPopRouteFunc} + navigationState={myNavigationState} + renderScene={renderSceneFun} +/>

    You can import NavigationExperimental like any other component in React Native. Once you have that, you can deconstruct any additional components from NavigationExperimental that you may find useful. Since I am feeling like building navigation stacks today, I'll go ahead and pick out NavigationCardStack and NavigationStateUtils.

    import React, { Component } from 'react'; +import { NavigationExperimental } from 'react-native'; + +const { + CardStack: NavigationCardStack, + StateUtils: NavigationStateUtils, +} = NavigationExperimental;

    As I said earlier, NavigationExperimental takes a different approach than Navigator and NavigatorIOS. Using it to build a navigation stack requires a few more steps than the stateful components, but the payoff is worth it.

    Step 1. Define Initial State and Top Level Component #

    Create a new component for your application. This will be the top-level object, so we will define the initial state here. The navigation state will be defined in the navigationState key, where we define our initial route:

    class BleedingEdgeApplication extends Component { + constructor(props, context) { + super(props, context); + + this.state = { + // This defines the initial navigation state. + navigationState: { + index: 0, // Starts with first route focused. + routes: [{key: 'My Initial Scene'}], // Starts with only one route. + }, + }; + + // We'll define this function later - hang on + this._onNavigationChange = this._onNavigationChange.bind(this); + } + + _onNavigationChange(type) { + // It's literally the next step. We'll get to it! + } + + render() { + return ( + <Text>This is a placeholder. We will come back to this and render our navigation here later.</Text> + ); + } +}

    Alright, now we have a simple stateful component that doesn't do much at all. We can change that. Our initial state contains one route, and the current index. That looks suspiciously just like our initial route definition in Navigator. Do you remember which actions its navigator object provided?

    Push and pop, of course. That seems pretty straightforward to implement. I promised you earlier we would be using reducers to manage state at the top-level object. Sit tight.

    Step 2. Reducing the Navigation State #

    NavigationExperimental comes built-in with a some useful reducers, and they are all available as part of NavigationStateUtils. The two we will be using right now are called -- yep -- push and pop. They take a navigationState object, and return a new navigationState object.

    We can use them to write our _onNavigationChange function which, given a "push" or "pop" action, will reduce the state accordingly.

    _onNavigationChange(type) { + // Extract the navigationState from the current state: + let {navigationState} = this.state; + + switch (type) { + case 'push': + // Push a new route, which in our case is an object with a key value. + // I am fond of cryptic keys (but seriously, keys should be unique) + const route = {key: 'Route-' + Date.now()}; + + // Use the push reducer provided by NavigationStateUtils + navigationState = NavigationStateUtils.push(navigationState, route); + break; + + case 'pop': + // Pop the current route using the pop reducer. + navigationState = NavigationStateUtils.pop(navigationState); + break; + } + + // NavigationStateUtils gives you back the same `navigationState` if nothing + // has changed. We will only update state if it has changed. + if (this.state.navigationState !== navigationState) { + // Always use setState() when setting a new state! + this.setState({navigationState}); + // If you are new to ES6, the above is equivalent to: + // this.setState({navigationState: navigationState}); + } +}

    Cool. I'm getting the hang of this. This is the heart of NavigationExperimental. We are only handling two actions here, but a more complex application could also take into account a "back" action (e.g. Android back button), as well as handle the transition between several tabs in a tabbed application.

    I am still missing the initial scene that will be rendered (as well as the actual navigator that will wrap it, but lets not get ahead of ourselves).

    Step 3. Define Scenes #

    First I want to define a Row component out of convenience. It displays some text and can call some function when pressed.

    class TappableRow extends Component { + render() { + return ( + <TouchableHighlight + style={styles.row} + underlayColor="#D0D0D0" + onPress={this.props.onPress}> + <Text style={styles.buttonText}> + {this.props.text} + </Text> + </TouchableHighlight> + ); + } +}

    Now I will define my actual scene. It uses a scroll view to display a vertical list of items. The first row displays the current route's key, and two more rows will call our theoretical navigator's push and pop functions.

    class MyVeryComplexScene extends Component { + render() { + return ( + <ScrollView style={styles.scrollView}> + <Text style={styles.row}> + Route: {this.props.route.key} + </Text> + <TappableRow + text="Tap me to load the next scene" + onPress={this.props.onPushRoute} + /> + <TappableRow + text="Tap me to go back" + onPress={this.props.onPopRoute} + /> + </ScrollView> + ); + } +}

    Step 4. Create a Navigation Stack #

    Now that I have defined the state and a function to manage it, I think I can go ahead and create a proper navigator component now. While I'm at it, I'll render my scene after configuring it with the current route's props.

    class MyVerySimpleNavigator extends Component { + + // This sets up the methods (e.g. Pop, Push) for navigation. + constructor(props, context) { + super(props, context); + + this._onPushRoute = this.props.onNavigationChange.bind(null, 'push'); + this._onPopRoute = this.props.onNavigationChange.bind(null, 'pop'); + + this._renderScene = this._renderScene.bind(this); + } + + // Now we finally get to use the `NavigationCardStack` to render the scenes. + render() { + return ( + <NavigationCardStack + onNavigateBack={this._onPopRoute} + navigationState={this.props.navigationState} + renderScene={this._renderScene} + style={styles.navigator} + /> + ); + } + + // Render a scene for route. + // The detailed spec of `sceneProps` is defined at `NavigationTypeDefinition` + // as type `NavigationSceneRendererProps`. + // Here you could choose to render a different component for each route, but + // we'll keep it simple. + _renderScene(sceneProps) { + return ( + <MyVeryComplexScene + route={sceneProps.scene.route} + onPushRoute={this._onPushRoute} + onPopRoute={this._onPopRoute} + onExit={this.props.onExit} + /> + ); + } +}

    That's it -- so close to the finish line I can smell it. Lets plug our new navigator into our top-level component:

    class BleedingEdgeApplication extends Component { + + // constructor and other methods omitted for clarity + + render() { + return ( + <MyVerySimpleNavigator + navigationState={this.state.navigationState} + onNavigationChange={this._onNavigationChange} + onExit={this._exit} + /> + ); + } +}

    We're done! Bask in the glory of NavigationExperimental.

    Hey -- I think you are missing something. #

    (Oh yes, sorry about that -- here's our missing imports and styles.)

    import { NavigationExperimental, PixelRatio, ScrollView, StyleSheet, Text, TouchableHighlight } from 'react-native'; + +const styles = StyleSheet.create({ + navigator: { + flex: 1, + }, + scrollView: { + marginTop: 64 + }, + row: { + padding: 15, + backgroundColor: 'white', + borderBottomWidth: 1 / PixelRatio.get(), + borderBottomColor: '#CDCDCD', + }, + rowText: { + fontSize: 17, + }, + buttonText: { + fontSize: 17, + fontWeight: '500', + }, +});

    Homework #

    You are now an expert navigator. Take a look at NavigationExperimental in UIExplorer to learn how to implement other types of navigation hierarchies, such as a tabbed application with multiple navigation stacks.

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/navigator.html b/docs/navigator.html index f7d84c32551..c9c4130b7a8 100644 --- a/docs/navigator.html +++ b/docs/navigator.html @@ -1,44 +1,134 @@ -Navigator – React Native | A framework for building native apps using React

    Navigator #

    Edit on GitHub

    Use Navigator to transition between different scenes in your app. To -accomplish this, provide route objects to the navigator to identify each -scene, and also a renderScene function that the navigator can use to -render the scene for a given route.

    To change the animation or gesture properties of the scene, provide a -configureScene prop to get the config object for a given route. See -Navigator.SceneConfigs for default animations and more info on -scene config options.

    Basic Usage #

    <Navigator - initialRoute={{name: 'My First Scene', index: 0}} - renderScene={(route, navigator) => - <MySceneComponent - name={route.name} - onForward={() => { - var nextIndex = route.index + 1; - navigator.push({ - name: 'Scene ' + nextIndex, - index: nextIndex, - }); - }} - onBack={() => { - if (route.index > 0) { +Navigator – React Native | A framework for building native apps using React

    Navigator #

    Edit on GitHub

    Navigator handles the transition between different scenes in your app. +It is implemented in JavaScript and is available on both iOS and Android. If +you are targeting iOS only, you may also want to consider using +NavigatorIOS as it leverages native UIKit +navigation.

    To set up the Navigator you provide one or more objects called routes, +to identify each scene. You also provide a renderScene function that +renders the scene for each route object.

    import React, { Component } from 'react'; +import { Text, Navigator } from 'react-native'; + +export default class NavAllDay extends Component { + render() { + return ( + <Navigator + initialRoute={{ title: 'Awesome Scene', index: 0 }} + renderScene={(route, navigator) => + <Text>Hello {route.title}!</Text> + } + style={{padding: 100}} + /> + ); + } +}

    In the above example, initialRoute is used to specify the first route. It +contains a title property that identifies the route. The renderScene +prop returns a function that displays text based on the route's title.

    Additional Scenes #

    The first example demonstrated one scene. To set up multiple scenes, you pass +the initialRouteStack prop to Navigator:

    render() { + const routes = [ + {title: 'First Scene', index: 0}, + {title: 'Second Scene', index: 1}, + ]; + return ( + <Navigator + initialRoute={routes[0]} + initialRouteStack={routes} + renderScene={(route, navigator) => + <TouchableHighlight onPress={() => { + if (route.index === 0) { + navigator.push(routes[1]); + } else { navigator.pop(); } - }} - /> + }}> + <Text>Hello {route.title}!</Text> + </TouchableHighlight> + } + style={{padding: 100}} + /> + ); +}

    In the above example, a routes variable is defined with two route objects +representing two scenes. Each route has an index property that is used to +manage the scene being rendered. The renderScene method is changed to +either push or pop the navigator depending on the current route's index. +Finally, the Text component in the scene is now wrapped in a +TouchableHighlight component to help trigger the navigator transitions.

    Navigation Bar #

    You can optionally pass in your own navigation bar by returning a +Navigator.NavigationBar component to the navigationBar prop in +Navigator. You can configure the navigation bar properties, through +the routeMapper prop. There you set up the left, right, and title +properties of the navigation bar:

    <Navigator + renderScene={(route, navigator) => + // ... + } + navigationBar={ + <Navigator.NavigationBar + routeMapper={{ + LeftButton: (route, navigator, index, navState) => + { return (<Text>Cancel</Text>); }, + RightButton: (route, navigator, index, navState) => + { return (<Text>Done</Text>); }, + Title: (route, navigator, index, navState) => + { return (<Text>Awesome Nav Bar</Text>); }, + }} + style={{backgroundColor: 'gray'}} + /> + } +/>

    When configuring the left, right, and title items for the navigation bar, +you have access to info such as the current route object and navigation +state. This allows you to customize the title for each scene as well as +the buttons. For example, you can choose to hide the left button for one of +the scenes.

    Typically you want buttons to represent the left and right buttons. Building +on the previous example, you can set this up as follows:

    LeftButton: (route, navigator, index, navState) => + { + if (route.index === 0) { + return null; + } else { + return ( + <TouchableHighlight onPress={() => navigator.pop()}> + <Text>Back</Text> + </TouchableHighlight> + ); } - />

    Props #

    configureScene function #

    Optional function that allows configuration about scene animations and -gestures. Will be invoked with the route and the routeStack and should -return a scene configuration object

    (route, routeStack) => Navigator.SceneConfigs.FloatFromRight

    Available options are:

    • Navigator.SceneConfigs.PushFromRight (default)
    • Navigator.SceneConfigs.FloatFromRight
    • Navigator.SceneConfigs.FloatFromLeft
    • Navigator.SceneConfigs.FloatFromBottom
    • Navigator.SceneConfigs.FloatFromBottomAndroid
    • Navigator.SceneConfigs.FadeAndroid
    • Navigator.SceneConfigs.HorizontalSwipeJump
    • Navigator.SceneConfigs.HorizontalSwipeJumpFromRight
    • Navigator.SceneConfigs.VerticalUpSwipeJump
    • Navigator.SceneConfigs.VerticalDownSwipeJump

    initialRoute object #

    Specify a route to start on. A route is an object that the navigator -will use to identify each scene to render. initialRoute must be -a route in the initialRouteStack if both props are provided. The -initialRoute will default to the last item in the initialRouteStack.

    initialRouteStack [object] #

    Provide a set of routes to initially mount. Required if no initialRoute -is provided. Otherwise, it will default to an array containing only the -initialRoute

    navigationBar node #

    Optionally provide a component as navigation bar that persists across scene -transitions. The component will receive two props: navigator and navState. -It will be rerendered when the routes change.

    navigator object #

    Optionally provide the navigator object from a parent Navigator

    onDidFocus function #

    Will be called with the new route of each scene after the transition is -complete or after the initial mounting

    onWillFocus function #

    Will emit the target route upon mounting and before each nav transition

    renderScene function #

    Required function which renders the scene for a given route. Will be -invoked with the route and the navigator object

    (route, navigator) => - <MySceneComponent title={route.title} navigator={navigator} />

    sceneStyle View#style #

    Styles to apply to the container of each scene

    Methods #

    immediatelyResetRouteStack(nextRouteStack: RouteStack) #

    Reset every scene with an array of routes.

    jumpTo(route) #

    Transition to an existing scene without unmounting

    jumpForward() #

    Jump forward to the next scene in the route stack.

    jumpBack() #

    Jump backward without unmounting the current scene.

    push(route) #

    Navigate forward to a new scene, squashing any scenes that you could -jumpForward to.

    pop() #

    Transition back and unmount the current scene.

    replaceAtIndex(route, index, cb) #

    Replace a scene as specified by an index

    index specifies the route in the stack that should be replaced. -If it's negative, it counts from the back.

    replace(route) #

    Replace the current scene with a new route.

    replacePrevious(route) #

    Replace the previous scene.

    popToTop() #

    Pop to the first scene in the stack, unmounting every other scene.

    popToRoute(route) #

    Pop to a particular scene, as specified by its route. -All scenes after it will be unmounted.

    replacePreviousAndPop(route) #

    Replace the previous scene and pop to it.

    resetTo(route) #

    Navigate to a new scene and reset route stack.

    getCurrentRoutes() #

    Returns the current list of routes.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/navigatorios.html b/docs/navigatorios.html index 7403448ec85..88f5024bd49 100644 --- a/docs/navigatorios.html +++ b/docs/navigatorios.html @@ -1,142 +1,156 @@ -NavigatorIOS – React Native | A framework for building native apps using React

    NavigatorIOS #

    Edit on GitHub

    NavigatorIOS wraps UIKit navigation and allows you to add back-swipe -functionality across your app.

    NOTE: This Component is not maintained by Facebook

    This component is under community responsibility. -If a pure JavaScript solution fits your needs you may try the Navigator -component instead.

    Routes #

    A route is an object used to describe each page in the navigator. The first -route is provided to NavigatorIOS as initialRoute:

    render: function() { - return ( - <NavigatorIOS - initialRoute={{ - component: MyView, - title: 'My View Title', - passProps: { myProp: 'foo' }, - }} - /> - ); -},

    Now MyView will be rendered by the navigator. It will receive the route -object in the route prop, a navigator, and all of the props specified in -passProps.

    See the initialRoute propType for a complete definition of a route.

    Navigator #

    A navigator is an object of navigation functions that a view can call. It -is passed as a prop to any component rendered by NavigatorIOS.

    var MyView = React.createClass({ - _handleBackButtonPress: function() { +NavigatorIOS – React Native | A framework for building native apps using React

    NavigatorIOS #

    Edit on GitHub

    NavigatorIOS is a wrapper around +UINavigationController, +enabling you to implement a navigation stack. It works exactly the same as it +would on a native app using UINavigationController, providing the same +animations and behavior from UIKIt.

    As the name implies, it is only available on iOS. Take a look at +Navigator for a similar solution for your +cross-platform needs, or check out +react-native-navigation, a +component that aims to provide native navigation on both iOS and Android.

    To set up the navigator, provide the initialRoute prop with a route +object. A route object is used to describe each scene that your app +navigates to. initialRoute represents the first route in your navigator.

    import React, { Component } from 'react'; +import { NavigatorIOS, Text } from 'react-native'; + +export default class NavigatorIOSApp extends Component { + render() { + return ( + <NavigatorIOS + initialRoute={{ + component: MyScene, + title: 'My Initial Scene', + }} + style={{flex: 1}} + /> + ); + } +} + +class MyScene extends Component { + static propTypes = { + title: PropTypes.string.isRequired, + navigator: PropTypes.object.isRequired, + } + + constructor(props, context) { + super(props, context); + this._onForward = this._onForward.bind(this); + this._onBack = this._onBack.bind(this); + } + + _onForward() { + this.props.navigator.push({ + title: 'Scene ' + nextIndex, + }); + } + + render() { + return ( + <View> + <Text>Current Scene: { this.props.title }</Text> + <TouchableHighlight onPress={this._onForward}> + <Text>Tap me to load the next scene</Text> + </TouchableHighlight> + </View> + ) + } +}

    In this code, the navigator renders the component specified in initialRoute, +which in this case is MyScene. This component will receive a route prop +and a navigator prop representing the navigator. The navigator's navigation +bar will render the title for the current scene, "My Initial Scene".

    You can optionally pass in a passProps property to your initialRoute. +NavigatorIOS passes this in as props to the rendered component:

    initialRoute={{ + component: MyScene, + title: 'My Initial Scene', + passProps: { myProp: 'foo' } +}}

    You can then access the props passed in via {this.props.myProp}.

    Handling Navigation #

    To trigger navigation functionality such as pushing or popping a view, you +have access to a navigator object. The object is passed in as a prop to any +component that is rendered by NavigatorIOS. You can then call the +relevant methods to perform the navigation action you need:

    class MyView extends Component { + _handleBackPress() { this.props.navigator.pop(); - }, - _handleNextButtonPress: function() { + } + + _handleNextPress(nextRoute) { this.props.navigator.push(nextRoute); - }, - ... -});

    Navigator functions are also available on the NavigatorIOS component:

    var MyView = React.createClass({ - _handleNavigationRequest: function() { - this.refs.nav.push(otherRoute); - }, - render: () => ( - <NavigatorIOS - ref="nav" - initialRoute={...} - /> - ), -});

    Props passed to the NavigatorIOS component will set the default configuration + } + + render() { + const nextRoute = { + component: MyView, + title: 'Bar That', + passProps: { myProp: 'bar' } + }; + return( + <TouchableHighlight onPress={() => this._handleNextPress(nextRoute)}> + <Text style={{marginTop: 200, alignSelf: 'center'}}> + See you on the other nav {this.props.myProp}! + </Text> + </TouchableHighlight> + ); + } +}

    You can also trigger navigator functionality from the NavigatorIOS +component:

    class NavvyIOS extends Component { + _handleNavigationRequest() { + this.refs.nav.push({ + component: MyView, + title: 'Genius', + passProps: { myProp: 'genius' }, + }); + } + + render() { + return ( + <NavigatorIOS + ref='nav' + initialRoute={{ + component: MyView, + title: 'Foo This', + passProps: { myProp: 'foo' }, + rightButtonTitle: 'Add', + onRightButtonPress: () => this._handleNavigationRequest(), + }} + style={{flex: 1}} + /> + ); + } +}

    The code above adds a _handleNavigationRequest private method that is +invoked from the NavigatorIOS component when the right navigation bar item +is pressed. To get access to the navigator functionality, a reference to it +is saved in the ref prop and later referenced to push a new scene into the +navigation stack.

    Navigation Bar Configuration #

    Props passed to NavigatorIOS will set the default configuration for the navigation bar. Props passed as properties to a route object will set the configuration for that route's navigation bar, overriding any props -passed to the NavigatorIOS component.

    Props #

    barTintColor string #

    The default background color of the navigation bar

    initialRoute {component: function, title: string, passProps: object, backButtonIcon: Image.propTypes.source, backButtonTitle: string, leftButtonIcon: Image.propTypes.source, leftButtonTitle: string, onLeftButtonPress: function, rightButtonIcon: Image.propTypes.source, rightButtonTitle: string, onRightButtonPress: function, wrapperStyle: [object Object], navigationBarHidden: bool, shadowHidden: bool, tintColor: string, barTintColor: string, titleTextColor: string, translucent: bool} #

    NavigatorIOS uses "route" objects to identify child views, their props, -and navigation bar configuration. "push" and all the other navigation -operations expect routes to be like this:

    interactivePopGestureEnabled bool #

    A Boolean value that indicates whether the interactive pop gesture is enabled. Useful -for enabling/disabling the back swipe navigation gesture. If this prop is not provided, -the default behavior is for the back swipe gesture to be enabled when the navigation bar -is shown and disabled when the navigation bar is hidden. Once you've provided -the interactivePopGestureEnabled prop, you can never restore the default behavior.

    itemWrapperStyle View#style #

    The default wrapper style for components in the navigator. -A common use case is to set the backgroundColor for every page

    navigationBarHidden bool #

    A Boolean value that indicates whether the navigation bar is hidden by default

    shadowHidden bool #

    A Boolean value that indicates whether to hide the 1px hairline shadow by default

    tintColor string #

    The default color used for buttons in the navigation bar

    titleTextColor string #

    The default text color of the navigation bar title

    translucent bool #

    A Boolean value that indicates whether the navigation bar is translucent by default

    Methods #

    push(route: { - component: Function; - title: string; - passProps?: Object; - backButtonTitle?: string; - backButtonIcon?: Object; - leftButtonTitle?: string; - leftButtonIcon?: Object; - onLeftButtonPress?: Function; - rightButtonTitle?: string; - rightButtonIcon?: Object; - onRightButtonPress?: Function; - wrapperStyle?: any; -}) #

    Navigate forward to a new route

    popN(n: number) #

    Go back N pages at once. When N=1, behavior matches pop()

    pop() #

    Go back one page

    replaceAtIndex(route: { - component: Function; - title: string; - passProps?: Object; - backButtonTitle?: string; - backButtonIcon?: Object; - leftButtonTitle?: string; - leftButtonIcon?: Object; - onLeftButtonPress?: Function; - rightButtonTitle?: string; - rightButtonIcon?: Object; - onRightButtonPress?: Function; - wrapperStyle?: any; -}, index: number) #

    Replace a route in the navigation stack.

    index specifies the route in the stack that should be replaced. -If it's negative, it counts from the back.

    replace(route: { - component: Function; - title: string; - passProps?: Object; - backButtonTitle?: string; - backButtonIcon?: Object; - leftButtonTitle?: string; - leftButtonIcon?: Object; - onLeftButtonPress?: Function; - rightButtonTitle?: string; - rightButtonIcon?: Object; - onRightButtonPress?: Function; - wrapperStyle?: any; -}) #

    Replace the route for the current page and immediately -load the view for the new route.

    replacePrevious(route: { - component: Function; - title: string; - passProps?: Object; - backButtonTitle?: string; - backButtonIcon?: Object; - leftButtonTitle?: string; - leftButtonIcon?: Object; - onLeftButtonPress?: Function; - rightButtonTitle?: string; - rightButtonIcon?: Object; - onRightButtonPress?: Function; - wrapperStyle?: any; -}) #

    Replace the route/view for the previous page.

    popToTop() #

    Go back to the top item

    popToRoute(route: { - component: Function; - title: string; - passProps?: Object; - backButtonTitle?: string; - backButtonIcon?: Object; - leftButtonTitle?: string; - leftButtonIcon?: Object; - onLeftButtonPress?: Function; - rightButtonTitle?: string; - rightButtonIcon?: Object; - onRightButtonPress?: Function; - wrapperStyle?: any; -}) #

    Go back to the item for a particular route object

    replacePreviousAndPop(route: { - component: Function; - title: string; - passProps?: Object; - backButtonTitle?: string; - backButtonIcon?: Object; - leftButtonTitle?: string; - leftButtonIcon?: Object; - onLeftButtonPress?: Function; - rightButtonTitle?: string; - rightButtonIcon?: Object; - onRightButtonPress?: Function; - wrapperStyle?: any; -}) #

    Replaces the previous route/view and transitions back to it.

    resetTo(route: { - component: Function; - title: string; - passProps?: Object; - backButtonTitle?: string; - backButtonIcon?: Object; - leftButtonTitle?: string; - leftButtonIcon?: Object; - onLeftButtonPress?: Function; - rightButtonTitle?: string; - rightButtonIcon?: Object; - onRightButtonPress?: Function; - wrapperStyle?: any; -}) #

    Replaces the top item and popToTop

    Examples #

    Edit on GitHub
    'use strict'; +passed to the NavigatorIOS component.

    _handleNavigationRequest() { + this.refs.nav.push({ + //... + passProps: { myProp: 'genius' }, + barTintColor: '#996699', + }); +} + +render() { + return ( + <NavigatorIOS + //... + style={{flex: 1}} + barTintColor='#ffffcc' + /> + ); +}

    In the example above the navigation bar color is changed when the new route +is pushed.

    Props #

    barTintColor string #

    The default background color of the navigation bar.

    initialRoute {component: function, title: string, titleImage: Image.propTypes.source, passProps: object, backButtonIcon: Image.propTypes.source, backButtonTitle: string, leftButtonIcon: Image.propTypes.source, leftButtonTitle: string, onLeftButtonPress: function, rightButtonIcon: Image.propTypes.source, rightButtonTitle: string, onRightButtonPress: function, wrapperStyle: [object Object], navigationBarHidden: bool, shadowHidden: bool, tintColor: string, barTintColor: string, titleTextColor: string, translucent: bool} #

    NavigatorIOS uses route objects to identify child views, their props, +and navigation bar configuration. Navigation operations such as push +operations expect routes to look like this the initialRoute.

    interactivePopGestureEnabled bool #

    Boolean value that indicates whether the interactive pop gesture is +enabled. This is useful for enabling/disabling the back swipe navigation +gesture.

    If this prop is not provided, the default behavior is for the back swipe +gesture to be enabled when the navigation bar is shown and disabled when +the navigation bar is hidden. Once you've provided the +interactivePopGestureEnabled prop, you can never restore the default +behavior.

    itemWrapperStyle View#style #

    The default wrapper style for components in the navigator. +A common use case is to set the backgroundColor for every scene.

    navigationBarHidden bool #

    Boolean value that indicates whether the navigation bar is hidden +by default.

    shadowHidden bool #

    Boolean value that indicates whether to hide the 1px hairline shadow +by default.

    tintColor string #

    The default color used for the buttons in the navigation bar.

    titleTextColor string #

    The default text color of the navigation bar title.

    translucent bool #

    Boolean value that indicates whether the navigation bar is +translucent by default

    Methods #

    push(route) #

    Navigate forward to a new route.

    Parameters:
    Name and TypeDescription
    route

    object

    The new route to navigate to.

    popN(n) #

    Go back N scenes at once. When N=1, behavior matches pop().

    Parameters:
    Name and TypeDescription
    n

    number

    The number of scenes to pop.

    pop(0) #

    Pop back to the previous scene.

    replaceAtIndex(route, index) #

    Replace a route in the navigation stack.

    Parameters:
    Name and TypeDescription
    route

    object

    The new route that will replace the specified one.

    index

    number

    The route into the stack that should be replaced. + If it is negative, it counts from the back of the stack.

    replace(route) #

    Replace the route for the current scene and immediately +load the view for the new route.

    Parameters:
    Name and TypeDescription
    route

    object

    The new route to navigate to.

    replacePrevious(route) #

    Replace the route/view for the previous scene.

    Parameters:
    Name and TypeDescription
    route

    object

    The new route to will replace the previous scene.

    popToTop(0) #

    Go back to the topmost item in the navigation stack.

    popToRoute(route) #

    Go back to the item for a particular route object.

    Parameters:
    Name and TypeDescription
    route

    object

    The new route to navigate to.

    replacePreviousAndPop(route) #

    Replaces the previous route/view and transitions back to it.

    Parameters:
    Name and TypeDescription
    route

    object

    The new route that replaces the previous scene.

    resetTo(route) #

    Replaces the top item and pop to it.

    Parameters:
    Name and TypeDescription
    route

    object

    The new route that will replace the topmost item.

    Examples #

    Edit on GitHub
    'use strict'; const React = require('react'); const ReactNative = require('react-native'); @@ -381,7 +395,7 @@ const styles = StyleSheet}, }); -module.exports = NavigatorIOSExample;
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/netinfo.html b/docs/netinfo.html index 2b29355f095..d36fc7099b1 100644 --- a/docs/netinfo.html +++ b/docs/netinfo.html @@ -1,4 +1,4 @@ -NetInfo – React Native | A framework for building native apps using React

    NetInfo #

    Edit on GitHub

    NetInfo exposes info about online/offline status

    NetInfo.fetch().done((reach) => { +NetInfo – React Native | A framework for building native apps using React

    NetInfo #

    Edit on GitHub

    NetInfo exposes info about online/offline status

    NetInfo.fetch().done((reach) => { console.log('Initial: ' + reach); }); function handleFirstConnectivityChange(reach) { @@ -35,12 +35,12 @@ internet connectivity.

    NetInfo.isConnected.addEventListener( 'change', handleFirstConnectivityChange -);

    Methods #

    static addEventListener(eventName, handler) #

    Invokes the listener whenever network status changes. -The listener receives one of the connectivity types listed above.

    static removeEventListener(eventName, handler) #

    Removes the listener for network status changes.

    static fetch() #

    Returns a promise that resolves with one of the connectivity types listed -above.

    static isConnectionExpensive() #

    Properties #

    isConnected: ObjectExpression #

    An object with the same methods as above but the listener receives a +);

    Methods #

    static addEventListener(eventName, handler) #

    Invokes the listener whenever network status changes. +The listener receives one of the connectivity types listed above.

    static removeEventListener(eventName, handler) #

    Removes the listener for network status changes.

    static fetch(0) #

    Returns a promise that resolves with one of the connectivity types listed +above.

    static isConnectionExpensive(0) #

    Properties #

    isConnected: ObjectExpression #

    An object with the same methods as above but the listener receives a boolean which represents the internet connectivity. Use this if you are only interested with whether the device has internet -connectivity.

    Examples #

    Edit on GitHub
    'use strict'; +connectivity.

    Examples #

    Edit on GitHub
    'use strict'; const React = require('react'); const ReactNative = require('react-native'); @@ -207,7 +207,7 @@ exports.examples : 'Asynchronously check isConnectionExpensive', render(): ReactElement<any> { return <IsConnectionExpensive />; } }, -];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/network.html b/docs/network.html index 32fddf8bd4b..25cc6dd981b 100644 --- a/docs/network.html +++ b/docs/network.html @@ -1,4 +1,4 @@ -Network – React Native | A framework for building native apps using React

    Network #

    Edit on GitHub

    One of React Native's goals is to be a playground where we can experiment with different architectures and crazy ideas. Since browsers are not flexible enough, we had no choice but to reimplement the entire stack. In the places that we did not intend to change anything, we tried to be as faithful as possible to the browser APIs. The networking stack is a great example.

    Fetch #

    fetch is a better networking API being worked on by the standards committee and is already available in Chrome. It is available in React Native by default.

    Usage #

    fetch('https://mywebsite.com/endpoint/')

    Include a request object as the optional second argument to customize the HTTP request:

    fetch('https://mywebsite.com/endpoint/', { +Networking – React Native | A framework for building native apps using React

    Networking #

    Edit on GitHub

    Many mobile apps need to load resources from a remote URL. You may want to make a POST request to a REST API, or you may simply need to fetch a chunk of static content from another server.

    Using Fetch #

    React Native provides the Fetch API for your networking needs. Fetch will seem familiar if you have used XMLHttpRequest or other networking APIs before. You may refer to MDN's guide on Using Fetch for additional information.

    Making requests #

    In order to fetch content from an arbitrary URL, just pass the URL to fetch:

    fetch('https://mywebsite.com/mydata.json')

    Fetch also takes an optional second argument that allows you to customize the HTTP request. You may want to specify additional headers, or make a POST request:

    fetch('https://mywebsite.com/endpoint/', { method: 'POST', headers: { 'Accept': 'application/json', @@ -8,27 +8,38 @@ firstParam: 'yourValue', secondParam: 'yourOtherValue', }) -})

    Async #

    fetch returns a Promise that can be processed in two ways:

    1. Using then and catch in synchronous code:

      fetch('https://mywebsite.com/endpoint.php') -.then((response) => response.text()) -.then((responseText) => { - console.log(responseText); -}) -.catch((error) => { - console.warn(error); -});
    2. Called within an asynchronous function using ES7 async/await syntax:

      class MyComponent extends React.Component { -... -async getUsersFromApi() { - try { - let response = await fetch('https://mywebsite.com/endpoint/'); - let responseJson = await response.json(); - return responseJson.users; - } catch(error) { - // Handle error - console.error(error); +})

      Take a look at the Fetch Request docs for a full list of properties.

      Handling the response #

      The above examples show how you can make a request. In many cases, you will want to do something with the response.

      Networking is an inherently asynchronous operation. Fetch methods will return a Promise that make it straightforward to write code that works in an asynchronous manner:

      getMoviesFromApiAsync() { + return fetch('http://facebook.github.io/react-native/movies.json') + .then((response) => response.json()) + .then((responseJson) => { + return responseJson.movies; + }) + .catch((error) => { + console.error(error); + }); + }

      You can also use ES7's async/await syntax in React Native app:

      async getMoviesFromApi() { + try { + let response = await fetch('http://facebook.github.io/react-native/movies.json'); + let responseJson = await response.json(); + return responseJson.movies; + } catch(error) { + console.error(error); + } + }

      Don't forget to catch any errors that may be thrown by fetch, otherwise they will be dropped silently.

      Using Other Networking Libraries #

      The XMLHttpRequest API is built in to React Native. This means that you can use third party libraries such as frisbee or axios that depend on it, or you can use the XMLHttpRequest API directly if you prefer.

      var request = new XMLHttpRequest(); +request.onreadystatechange = (e) => { + if (request.readyState !== 4) { + return; } -} -... -}
    3. Note: Errors thrown by rejected Promises need to be caught, or they will be swallowed silently

    WebSocket #

    WebSocket is a protocol providing full-duplex communication channels over a single TCP connection.

    var ws = new WebSocket('ws://host.com/path'); + + if (request.status === 200) { + console.log('success', request.responseText); + } else { + console.warn('error'); + } +}; + +request.open('GET', 'https://mywebsite.com/endpoint/'); +request.send();

    The security model for XMLHttpRequest is different than on web as there is no concept of CORS in native apps.

    WebSocket Support #

    React Native supports WebSocket, a protocol which provides full-duplex communication channels over a single TCP connection.

    var ws = new WebSocket('ws://host.com/path'); ws.onopen = () => { // connection opened @@ -48,42 +59,7 @@ ws.onerror = ws.onclose = (e) => { // connection closed console.log(e.code, e.reason); -};

    XMLHttpRequest #

    XMLHttpRequest API is implemented on-top of iOS networking apis and OkHttp. The notable difference from web is the security model: you can read from arbitrary websites on the internet since there is no concept of CORS.

    var request = new XMLHttpRequest(); -request.onreadystatechange = (e) => { - if (request.readyState !== 4) { - return; - } - - if (request.status === 200) { - console.log('success', request.responseText); - } else { - console.warn('error'); - } -}; - -request.open('GET', 'https://mywebsite.com/endpoint.php'); -request.send();

    You can also use -

    var request = new XMLHttpRequest(); - -function onLoad() { - console.log(request.status); - console.log(request.responseText); -}; - -function onTimeout() { - console.log('Timeout'); - console.log(request.responseText); -}; - -function onError() { - console.log('General network error'); - console.log(request.responseText); -}; - -request.onload = onLoad; -request.ontimeout = onTimeout; -request.onerror = onError; -request.open('GET', 'https://mywebsite.com/endpoint.php'); -request.send();

    Please follow the MDN Documentation for a complete description of the API.

    As a developer, you're probably not going to use XMLHttpRequest directly as its API is very tedious to work with. But the fact that it is implemented and compatible with the browser API gives you the ability to use third-party libraries such as frisbee or axios directly from npm.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/panresponder.html b/docs/panresponder.html index 3a8c2064c75..03e27807d30 100644 --- a/docs/panresponder.html +++ b/docs/panresponder.html @@ -1,4 +1,4 @@ -PanResponder – React Native | A framework for building native apps using React

    PanResponder #

    Edit on GitHub

    PanResponder reconciles several touches into a single gesture. It makes +PanResponder – React Native | A framework for building native apps using React

    PanResponder #

    Edit on GitHub

    PanResponder reconciles several touches into a single gesture. It makes single-touch gestures resilient to extra touches, and can be used to recognize simple multi-touch gestures.

    By default, PanResponder holds an `InteractionManager handle to block long-running JS events from interrupting active gestures.

    It provides a predictable wrapper of the responder handlers provided by the @@ -47,7 +47,7 @@ native event object:

    onPanResponderMov <View {...this._panResponder.panHandlers} /> ); },

    Working Example #

    To see it in action, try the -PanResponder example in UIExplorer

    Methods #

    static create(config) #

    @param {object} config Enhanced versions of all of the responder callbacks +PanResponder example in UIExplorer

    Methods #

    static create(config) #

    @param {object} config Enhanced versions of all of the responder callbacks that provide not only the typical ResponderSyntheticEvent, but also the PanResponder gesture state. Simply replace the word Responder with PanResponder in each of the typical onResponder* callbacks. For @@ -58,7 +58,7 @@ as well.

    Be careful with onStartShould* callbacks. They only reflect updat Once the node is the responder, you can rely on every start/end event being processed by the gesture and gestureState being updated accordingly. (numberActiveTouches) may not be totally accurate unless you -are the responder.

    Examples #

    Edit on GitHub
    'use strict'; +are the responder.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -177,7 +177,7 @@ are the responder.

    },}); -module.exports = PanResponderExample;
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/performance.html b/docs/performance.html index 9d1f106f658..8dd6ada5024 100644 --- a/docs/performance.html +++ b/docs/performance.html @@ -1,4 +1,4 @@ -Performance – React Native | A framework for building native apps using React

    Performance #

    Edit on GitHub

    A compelling reason for using React Native instead of WebView-based +Performance – React Native | A framework for building native apps using React

    Performance #

    Edit on GitHub

    A compelling reason for using React Native instead of WebView-based tools is to achieve 60 FPS and a native look & feel to your apps. Where possible, we would like for React Native to do the right thing and help you to focus on your app instead of performance optimization, but there @@ -46,7 +46,7 @@ so they are not interrupted by frame drops on the JavaScript thread. anyways.)

    Similarly, you can happily scroll up and down through a ScrollView when the JavaScript thread is locked up because the ScrollView lives on the main thread (the scroll events are dispatched to the JS thread though, -but their receipt is not necessary for the scroll to occur).

    Common sources of performance problems #

    Development mode (dev=true) #

    JavaScript thread performance suffers greatly when running in dev mode. +but their receipt is not necessary for the scroll to occur).

    Common sources of performance problems #

    Console.log statements #

    When running a bundled app, these statements can cause a big bottleneck in the JavaScript thread. This includes calls from debugging libraries such as redux-logger, so make sure to remove them before bundling.

    Development mode (dev=true) #

    JavaScript thread performance suffers greatly when running in dev mode. This is unavoidable: a lot more work needs to be done at runtime to provide you with good warnings and error messages, such as validating propTypes and various other assertions.

    Slow navigator transitions #

    As mentioned above, Navigator animations are controlled by the @@ -184,7 +184,7 @@ inside of your onPress handler in requestAnimationFrame}); }

    Profiling #

    Use the built-in Profiler to get detailed information about work done in the JavaScript thread and main thread side-by-side.

    For iOS, Instruments are an invaluable tool, and on Android you should -learn to use systrace.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/picker.html b/docs/picker.html index 8d052e5fc10..7ac927c0ec5 100644 --- a/docs/picker.html +++ b/docs/picker.html @@ -1,4 +1,4 @@ -Picker – React Native | A framework for building native apps using React

    Picker #

    Edit on GitHub

    Renders the native picker component on iOS and Android. Example:

    <Picker +Picker – React Native | A framework for building native apps using React

    Picker #

    Edit on GitHub

    Renders the native picker component on iOS and Android. Example:

    <Picker selectedValue={this.state.language} onValueChange={(lang) => this.setState({language: lang})}> <Picker.Item label="Java" value="java" /> @@ -6,7 +6,7 @@ </Picker>

    Props #

    onValueChange function #

    Callback for when an item is selected. This is called with the following parameters: - itemValue: the value prop of the item that was selected - itemPosition: the index of the selected item in this picker

    selectedValue any #

    Value matching value of one of the items. Can be a string or an integer.

    style pickerStyleType #

    testID string #

    Used to locate this view in end-to-end tests.

    androidenabled bool #

    If set to false, the picker will be disabled, i.e. the user will not be able to make a -selection.

    androidmode enum('dialog', 'dropdown') #

    On Android, specifies how to display the selection items when the user taps on the picker:

    • 'dialog': Show a modal dialog. This is the default.
    • 'dropdown': Shows a dropdown anchored to the picker view

    androidprompt string #

    Prompt string for this picker, used on Android in dialog mode as the title of the dialog.

    iositemStyle itemStylePropType #

    Style to apply to each of the item labels.

    Examples #

    Edit on GitHub
    'use strict'; +selection.

    androidmode enum('dialog', 'dropdown') #

    On Android, specifies how to display the selection items when the user taps on the picker:

    • 'dialog': Show a modal dialog. This is the default.
    • 'dropdown': Shows a dropdown anchored to the picker view

    androidprompt string #

    Prompt string for this picker, used on Android in dialog mode as the title of the dialog.

    iositemStyle itemStylePropType #

    Style to apply to each of the item labels.

    Examples #

    Edit on GitHub
    'use strict'; const React = require('react'); const ReactNative = require('react-native'); @@ -129,7 +129,7 @@ const PickerExample = React}, }); -module.exports = PickerExample;
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/pickerios.html b/docs/pickerios.html index eb0a4f951c6..a54ed0010d0 100644 --- a/docs/pickerios.html +++ b/docs/pickerios.html @@ -1,4 +1,4 @@ -PickerIOS – React Native | A framework for building native apps using React

    PickerIOS #

    Edit on GitHub

    Props #

    itemStyle itemStylePropType #

    onValueChange function #

    selectedValue any #

    Examples #

    Edit on GitHub
    'use strict'; +PickerIOS – React Native | A framework for building native apps using React

    PickerIOS #

    Edit on GitHub

    Props #

    itemStyle itemStylePropType #

    onValueChange function #

    selectedValue any #

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -138,7 +138,7 @@ exports.examples : function(): ReactElement<any> { return <PickerStyleExample />; }, -}];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/pixelratio.html b/docs/pixelratio.html index 15b13fb58a2..a23022c7d26 100644 --- a/docs/pixelratio.html +++ b/docs/pixelratio.html @@ -1,17 +1,17 @@ -PixelRatio – React Native | A framework for building native apps using React

    PixelRatio #

    Edit on GitHub

    PixelRatio class gives access to the device pixel density.

    Fetching a correctly sized image #

    You should get a higher resolution image if you are on a high pixel density +PixelRatio – React Native | A framework for building native apps using React

    PixelRatio #

    Edit on GitHub

    PixelRatio class gives access to the device pixel density.

    Fetching a correctly sized image #

    You should get a higher resolution image if you are on a high pixel density device. A good rule of thumb is to multiply the size of the image you display by the pixel ratio.

    var image = getImage({ width: PixelRatio.getPixelSizeForLayoutSize(200), height: PixelRatio.getPixelSizeForLayoutSize(100), }); -<Image source={image} style={{width: 200, height: 100}} />

    Methods #

    static get() #

    Returns the device pixel density. Some examples:

    • PixelRatio.get() === 1
      • mdpi Android devices (160 dpi)
    • PixelRatio.get() === 1.5
      • hdpi Android devices (240 dpi)
    • PixelRatio.get() === 2
      • iPhone 4, 4S
      • iPhone 5, 5c, 5s
      • iPhone 6
      • xhdpi Android devices (320 dpi)
    • PixelRatio.get() === 3
      • iPhone 6 plus
      • xxhdpi Android devices (480 dpi)
    • PixelRatio.get() === 3.5
      • Nexus 6

    static getFontScale() #

    Returns the scaling factor for font sizes. This is the ratio that is used to calculate the +<Image source={image} style={{width: 200, height: 100}} />

    Methods #

    static get(0) #

    Returns the device pixel density. Some examples:

    • PixelRatio.get() === 1
      • mdpi Android devices (160 dpi)
    • PixelRatio.get() === 1.5
      • hdpi Android devices (240 dpi)
    • PixelRatio.get() === 2
      • iPhone 4, 4S
      • iPhone 5, 5c, 5s
      • iPhone 6
      • xhdpi Android devices (320 dpi)
    • PixelRatio.get() === 3
      • iPhone 6 plus
      • xxhdpi Android devices (480 dpi)
    • PixelRatio.get() === 3.5
      • Nexus 6

    static getFontScale(0) #

    Returns the scaling factor for font sizes. This is the ratio that is used to calculate the absolute font size, so any elements that heavily depend on that should use this to do calculations.

    If a font scale is not set, this returns the device pixel ratio.

    Currently this is only implemented on Android and reflects the user preference set in Settings > Display > Font size, on iOS it will always return the default pixel ratio. -@platform android

    static getPixelSizeForLayoutSize(layoutSize) #

    Converts a layout size (dp) to pixel size (px).

    Guaranteed to return an integer number.

    static roundToNearestPixel(layoutSize) #

    Rounds a layout size (dp) to the nearest layout size that corresponds to +@platform android

    static getPixelSizeForLayoutSize(layoutSize) #

    Converts a layout size (dp) to pixel size (px).

    Guaranteed to return an integer number.

    static roundToNearestPixel(layoutSize) #

    Rounds a layout size (dp) to the nearest layout size that corresponds to an integer number of pixels. For example, on a device with a PixelRatio of 3, PixelRatio.roundToNearestPixel(8.4) = 8.33, which corresponds to -exactly (8.33 * 3) = 25 pixels.

    static startDetecting() #

    // No-op for iOS, but used on the web. Should not be documented.

    Description #

    Edit on GitHub

    Pixel Grid Snapping #

    In iOS, you can specify positions and dimensions for elements with arbitrary precision, for example 29.674825. But, ultimately the physical display only have a fixed number of pixels, for example 640×960 for iphone 4 or 750×1334 for iphone 6. iOS tries to be as faithful as possible to the user value by spreading one original pixel into multiple ones to trick the eye. The downside of this technique is that it makes the resulting element look blurry.

    In practice, we found out that developers do not want this feature and they have to work around it by doing manual rounding in order to avoid having blurry elements. In React Native, we are rounding all the pixels automatically.

    We have to be careful when to do this rounding. You never want to work with rounded and unrounded values at the same time as you're going to accumulate rounding errors. Having even one rounding error is deadly because a one pixel border may vanish or be twice as big.

    In React Native, everything in JS and within the layout engine work with arbitrary precision numbers. It's only when we set the position and dimensions of the native element on the main thread that we round. Also, rounding is done relative to the root rather than the parent, again to avoid accumulating rounding errors.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/platform-specific-code.html b/docs/platform-specific-code.html index ae162205325..d0bdc537fcb 100644 --- a/docs/platform-specific-code.html +++ b/docs/platform-specific-code.html @@ -1,15 +1,10 @@ -Platform Specific Code – React Native | A framework for building native apps using React

    Platform Specific Code #

    Edit on GitHub

    When building a cross-platform app, the need to write different code for different platforms may arise. This can always be achieved by organizing the various components in different folders:

    /common/components/ -/android/components/ -/ios/components/

    Another option may be naming the components differently depending on the platform they are going to be used in:

    BigButtonIOS.js -BigButtonAndroid.js

    But React Native provides two alternatives to easily organize your code separating it by platform:

    Platform specific extensions #

    React Native will detect when a file has a .ios. or .android. extension and load the right file for each platform when requiring them from other components.

    For example, you can have these files in your project:

    BigButton.ios.js -BigButton.android.js

    With this setup, you can just require the files from a different component without paying attention to the platform in which the app will run.

    import BigButton from './components/BigButton';

    React Native will import the correct component for the running platform.

    Platform module #

    A module is provided by React Native to detect what is the platform in which the app is running. This piece of functionality can be useful when only small parts of a component are platform specific.

    var { Platform } = ReactNative; +Platform Specific Code – React Native | A framework for building native apps using React

    Platform Specific Code #

    Edit on GitHub

    When building a cross-platform app, you'll want to re-use as much code as possible. Scenarios may arise where it makes sense for the code to be different, for example you may want to implement separate visual components for iOS and Android.

    React Native provides two ways to easily organize your code and separate it by platform:

    Certain components may have properties that work on one platform only. All of these props are annotated with @platform and have a small badge next to them on the website.

    Platform module #

    React Native provides a module that detects the platform in which the app is running. You can use the detection logic to implement platform-specific code. Use this option when only small parts of a component are platform-specific.

    import { Platform, StyleSheet } from 'react-native'; -var styles = StyleSheet.create({ +const styles = StyleSheet.create({ height: (Platform.OS === 'ios') ? 200 : 100, -});

    Platform.OS will be ios when running in iOS and android when running in an Android device or simulator.

    There is also a Platform.select method available, that given an object containing Platform.OS as keys, -returns the value for the platform you are currently running on.

    var { Platform } = ReactNative; +});

    Platform.OS will be ios when running on iOS and android when running on Android.

    There is also a Platform.select method available, that given an object containing Platform.OS as keys, returns the value for the platform you are currently running on.

    import { Platform, StyleSheet } from 'react-native'; -var styles = StyleSheet.create({ +const styles = StyleSheet.create({ container: { flex: 1, ...Platform.select({ @@ -21,17 +16,17 @@ returns the value for the platform you are currently running on.

    }, }), }, -});

    This will result in a container having flex: 1 on both platforms and backgroundColor - red on iOS and blue -on Android.

    Since it accepts any value, you can also use it to return platform specific component, like below:

    var Component = Platform.select({ +});

    This will result in a container having flex: 1 on both platforms, a red background color on iOS, and a blue background color on Android.

    Since it accepts any value, you can also use it to return platform specific component, like below:

    const Component = Platform.select({ ios: () => require('ComponentIOS'), android: () => require('ComponentAndroid'), })(); -<Component />;

    Detecting Android version #

    On Android, the Platform module can be also used to detect which is the version of the Android Platform in which the app is running

    var {Platform} = ReactNative; +<Component />;

    Detecting the Android version #

    On Android, the Platform module can also be used to detect the version of the Android Platform in which the app is running:

    import { Platform } from 'react-native'; if(Platform.Version === 21){ console.log('Running on Lollipop!'); -}

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/progressbarandroid.html b/docs/progressbarandroid.html index 92d69164fe8..f1da22ac7f1 100644 --- a/docs/progressbarandroid.html +++ b/docs/progressbarandroid.html @@ -1,4 +1,4 @@ -ProgressBarAndroid – React Native | A framework for building native apps using React

    ProgressBarAndroid #

    Edit on GitHub

    React component that wraps the Android-only ProgressBar. This component is used to indicate +ProgressBarAndroid – React Native | A framework for building native apps using React

    ProgressBarAndroid #

    Edit on GitHub

    React component that wraps the Android-only ProgressBar. This component is used to indicate that the app is loading or there is some activity in the app.

    Example:

    render: function() { var progressBar = <View style={styles.container}> @@ -13,7 +13,7 @@ that the app is loading or there is some activity in the app.

    Example:

    /> ); },

    Props #

    color color #

    Color of the progress bar.

    indeterminate indeterminateType #

    If the progress bar will show indeterminate progress. Note that this -can only be false if styleAttr is Horizontal.

    progress number #

    The progress value (between 0 and 1).

    styleAttr STYLE_ATTRIBUTES #

    Style of the ProgressBar. One of:

    • Horizontal
    • Normal (default)
    • Small
    • Large
    • Inverse
    • SmallInverse
    • LargeInverse

    testID string #

    Used to locate this view in end-to-end tests.

    Examples #

    Edit on GitHub
    'use strict'; +can only be false if styleAttr is Horizontal.

    progress number #

    The progress value (between 0 and 1).

    styleAttr STYLE_ATTRIBUTES #

    Style of the ProgressBar. One of:

    • Horizontal
    • Normal (default)
    • Small
    • Large
    • Inverse
    • SmallInverse
    • LargeInverse

    testID string #

    Used to locate this view in end-to-end tests.

    Examples #

    Edit on GitHub
    'use strict'; var ProgressBar = require('ProgressBarAndroid'); var React = require('React'); @@ -75,7 +75,7 @@ can only be false if styleAttr is Horizontal.

    < }, }); -module.exports = ProgressBarAndroidExample;
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/progressviewios.html b/docs/progressviewios.html index 1a9d11a848e..2f8e83b2b89 100644 --- a/docs/progressviewios.html +++ b/docs/progressviewios.html @@ -1,4 +1,4 @@ -ProgressViewIOS – React Native | A framework for building native apps using React

    ProgressViewIOS #

    Edit on GitHub

    Use ProgressViewIOS to render a UIProgressView on iOS.

    Props #

    progress number #

    The progress value (between 0 and 1).

    progressImage Image.propTypes.source #

    A stretchable image to display as the progress bar.

    progressTintColor string #

    The tint color of the progress bar itself.

    progressViewStyle enum('default', 'bar') #

    The progress bar style.

    trackImage Image.propTypes.source #

    A stretchable image to display behind the progress bar.

    trackTintColor string #

    The tint color of the progress bar track.

    Examples #

    Edit on GitHub
    'use strict'; +ProgressViewIOS – React Native | A framework for building native apps using React

    ProgressViewIOS #

    Edit on GitHub

    Use ProgressViewIOS to render a UIProgressView on iOS.

    Props #

    progress number #

    The progress value (between 0 and 1).

    progressImage Image.propTypes.source #

    A stretchable image to display as the progress bar.

    progressTintColor string #

    The tint color of the progress bar itself.

    progressViewStyle enum('default', 'bar') #

    The progress bar style.

    trackImage Image.propTypes.source #

    A stretchable image to display behind the progress bar.

    trackTintColor string #

    The tint color of the progress bar track.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -67,7 +67,7 @@ exports.examples : { marginTop: 20, } -});
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/props.html b/docs/props.html new file mode 100644 index 00000000000..74734efbbd3 --- /dev/null +++ b/docs/props.html @@ -0,0 +1,61 @@ +Props – React Native | A framework for building native apps using React

    Props #

    Edit on GitHub

    Most components can be customized when they are created, with different parameters. These creation parameters are called props.

    For example, one basic React Native component is the Image. When you +create an image, you can use a prop named source to control what image it shows.

    import React, { Component } from 'react'; +import { AppRegistry, Image } from 'react-native'; + +class Bananas extends Component { + render() { + let pic = { + uri: 'https://upload.wikimedia.org/wikipedia/commons/d/de/Bananavarieties.jpg' + }; + return ( + <Image source={pic} style={{width: 193, height: 110}}/> + ); + } +} + +AppRegistry.registerComponent('Bananas', () => Bananas);

    Notice that {pic} is surrounded by braces, to embed the variable pic into JSX. You can put any JavaScript expression inside braces in JSX.

    Your own components can also use props. This lets you make a single component +that is used in many different places in your app, with slightly different +properties in each place. Just refer to this.props in your render function. Here's an example:

    import React, { Component } from 'react'; +import { AppRegistry, Text, View } from 'react-native'; + +class Greeting extends Component { + render() { + return ( + <Text>Hello {this.props.name}!</Text> + ); + } +} + +class LotsOfGreetings extends Component { + render() { + return ( + <View style={{alignItems: 'center'}}> + <Greeting name='Rexxar' /> + <Greeting name='Jaina' /> + <Greeting name='Valeera' /> + </View> + ); + } +} + +AppRegistry.registerComponent('LotsOfGreetings', () => LotsOfGreetings);

    Using name as a prop lets us customize the Greeting component, so we can reuse that component for each of our greetings. This example also uses the Greeting component in JSX, just like the built-in components. The power to do this is what makes React so cool - if you find yourself wishing that you had a different set of UI primitives to work with, you just invent new ones.

    The other new thing going on here is the View component. A View is useful +as a container for other components, to help control style and layout.

    With props and the basic Text, Image, and View components, you can +build a wide variety of static screens. To learn how to make your app change over time, you need to learn about State.

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/pushnotificationios.html b/docs/pushnotificationios.html index 580c19ca431..6e71fbeff7b 100644 --- a/docs/pushnotificationios.html +++ b/docs/pushnotificationios.html @@ -1,7 +1,7 @@ -PushNotificationIOS – React Native | A framework for building native apps using React

    PushNotificationIOS #

    Edit on GitHub

    Handle push notifications for your app, including permission handling and +PushNotificationIOS – React Native | A framework for building native apps using React

    PushNotificationIOS #

    Edit on GitHub

    Handle push notifications for your app, including permission handling and icon badge number.

    To get up and running, configure your notifications with Apple -and your server-side system. To get an idea, this is the Parse guide.

    Manually link the PushNotificationIOS library

    • Be sure to add the following to your Header Search Paths: -$(SRCROOT)/../node_modules/react-native/Libraries/PushNotificationIOS
    • Set the search to recursive

    Finally, to enable support for notification and register events you need to augment your AppDelegate.

    At the top of your AppDelegate.m:

    #import "RCTPushNotificationManager.h"

    And then in your AppDelegate implementation add the following:

    // Required to register for notifications +and your server-side system. To get an idea, this is the Parse guide.

    Manually link the PushNotificationIOS library

    • Add the following to your Project: node_modules/react-native/Libraries/PushNotificationIOS/RCTPushNotification.xcodeproj
    • Add the following to Link Binary With Libraries: libRCTPushNotification.a
    • Add the following to your Header Search Paths: +$(SRCROOT)/../node_modules/react-native/Libraries/PushNotificationIOS and set the search to recursive

    Finally, to enable support for notification and register events you need to augment your AppDelegate.

    At the top of your AppDelegate.m:

    #import "RCTPushNotificationManager.h"

    And then in your AppDelegate implementation add the following:

    // Required to register for notifications - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { [RCTPushNotificationManager didRegisterUserNotificationSettings:notificationSettings]; @@ -20,30 +20,34 @@ and your server-side system. To get an idea, - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { [RCTPushNotificationManager didReceiveLocalNotification:notification]; - }

    Methods #

    static presentLocalNotification(details) #

    Schedules the localNotification for immediate presentation.

    details is an object containing:

    • alertBody : The message displayed in the notification alert.
    • alertAction : The "action" displayed beneath an actionable notification. Defaults to "view";
    • soundName : The sound played when the notification is fired (optional).
    • category : The category of this notification, required for actionable notifications (optional).
    • userInfo : An optional object containing additional notification data.
    • applicationIconBadgeNumber (optional) : The number to display as the app’s icon badge. The default value of this property is 0, which means that no badge is displayed.

    static scheduleLocalNotification(details) #

    Schedules the localNotification for future presentation.

    details is an object containing:

    • fireDate : The date and time when the system should deliver the notification.
    • alertBody : The message displayed in the notification alert.
    • alertAction : The "action" displayed beneath an actionable notification. Defaults to "view";
    • soundName : The sound played when the notification is fired (optional).
    • category : The category of this notification, required for actionable notifications (optional).
    • userInfo : An optional object containing additional notification data.
    • applicationIconBadgeNumber (optional) : The number to display as the app’s icon badge. Setting the number to 0 removes the icon badge.

    static cancelAllLocalNotifications() #

    Cancels all scheduled localNotifications

    static setApplicationIconBadgeNumber(number) #

    Sets the badge number for the app icon on the home screen

    static getApplicationIconBadgeNumber(callback) #

    Gets the current badge number for the app icon on the home screen

    static cancelLocalNotifications(userInfo) #

    Cancel local notifications.

    Optionally restricts the set of canceled notifications to those + } + - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error + { + NSLog(@"%@", error); + }

    Methods #

    static presentLocalNotification(details) #

    Schedules the localNotification for immediate presentation.

    details is an object containing:

    • alertBody : The message displayed in the notification alert.
    • alertAction : The "action" displayed beneath an actionable notification. Defaults to "view";
    • soundName : The sound played when the notification is fired (optional).
    • category : The category of this notification, required for actionable notifications (optional).
    • userInfo : An optional object containing additional notification data.
    • applicationIconBadgeNumber (optional) : The number to display as the app’s icon badge. The default value of this property is 0, which means that no badge is displayed.

    static scheduleLocalNotification(details) #

    Schedules the localNotification for future presentation.

    details is an object containing:

    • fireDate : The date and time when the system should deliver the notification.
    • alertBody : The message displayed in the notification alert.
    • alertAction : The "action" displayed beneath an actionable notification. Defaults to "view";
    • soundName : The sound played when the notification is fired (optional).
    • category : The category of this notification, required for actionable notifications (optional).
    • userInfo : An optional object containing additional notification data.
    • applicationIconBadgeNumber (optional) : The number to display as the app’s icon badge. Setting the number to 0 removes the icon badge.

    static cancelAllLocalNotifications(0) #

    Cancels all scheduled localNotifications

    static setApplicationIconBadgeNumber(number) #

    Sets the badge number for the app icon on the home screen

    static getApplicationIconBadgeNumber(callback) #

    Gets the current badge number for the app icon on the home screen

    static cancelLocalNotifications(userInfo) #

    Cancel local notifications.

    Optionally restricts the set of canceled notifications to those notifications whose userInfo fields match the corresponding fields -in the userInfo argument.

    static addEventListener(type, handler) #

    Attaches a listener to remote or local notification events while the app is running +in the userInfo argument.

    static getScheduledLocalNotifications(callback) #

    Gets the local notifications that are currently scheduled.

    static addEventListener(type, handler) #

    Attaches a listener to remote or local notification events while the app is running in the foreground or the background.

    Valid events are:

    • notification : Fired when a remote notification is received. The handler will be invoked with an instance of PushNotificationIOS.
    • localNotification : Fired when a local notification is received. The handler will be invoked with an instance of PushNotificationIOS.
    • register: Fired when the user registers for remote notifications. The -handler will be invoked with a hex string representing the deviceToken.

    static removeEventListener(type, handler) #

    Removes the event listener. Do this in componentWillUnmount to prevent -memory leaks

    static requestPermissions(permissions?) #

    Requests notification permissions from iOS, prompting the user's +handler will be invoked with a hex string representing the deviceToken.

    static removeEventListener(type, handler) #

    Removes the event listener. Do this in componentWillUnmount to prevent +memory leaks

    static requestPermissions(permissions?) #

    Requests notification permissions from iOS, prompting the user's dialog box. By default, it will request all notification permissions, but a subset of these can be requested by passing a map of requested permissions. The following permissions are supported:

    • alert
    • badge
    • sound

    If a map is provided to the method, only the permissions with truthy values will be requested.

    This method returns a promise that will resolve when the user accepts, rejects, or if the permissions were previously rejected. The promise -resolves to the current state of the permission.

    static abandonPermissions() #

    Unregister for all remote notifications received via Apple Push Notification service.

    You should call this method in rare circumstances only, such as when a new version of +resolves to the current state of the permission.

    static abandonPermissions(0) #

    Unregister for all remote notifications received via Apple Push Notification service.

    You should call this method in rare circumstances only, such as when a new version of the app removes support for all types of remote notifications. Users can temporarily prevent apps from receiving remote notifications through the Notifications section of -the Settings app. Apps unregistered through this method can always re-register.

    static checkPermissions(callback) #

    See what push permissions are currently enabled. callback will be -invoked with a permissions object:

    • alert :boolean
    • badge :boolean
    • sound :boolean

    static popInitialNotification() #

    DEPRECATED: An initial notification will be available if the app was +the Settings app. Apps unregistered through this method can always re-register.

    static checkPermissions(callback) #

    See what push permissions are currently enabled. callback will be +invoked with a permissions object:

    • alert :boolean
    • badge :boolean
    • sound :boolean

    static popInitialNotification(0) #

    DEPRECATED: An initial notification will be available if the app was cold-launched from a notification.

    The first caller of popInitialNotification will get the initial -notification object, or null. Subsequent invocations will return null.

    static getInitialNotification() #

    If the app launch was triggered by a push notification, -it will give the notification object, otherwise it will give null

    constructor(nativeNotif) #

    You will never need to instantiate PushNotificationIOS yourself. +notification object, or null. Subsequent invocations will return null.

    static getInitialNotification(0) #

    If the app launch was triggered by a push notification, +it will give the notification object, otherwise it will give null

    constructor(nativeNotif) #

    You will never need to instantiate PushNotificationIOS yourself. Listening to the notification event and invoking -popInitialNotification is sufficient

    getMessage() #

    An alias for getAlert to get the notification's main message string

    getSound() #

    Gets the sound string from the aps object

    getAlert() #

    Gets the notification's main message from the aps object

    getBadgeCount() #

    Gets the badge count number from the aps object

    getData() #

    Gets the data object on the notif

    Examples #

    Edit on GitHub
    'use strict'; +popInitialNotification is sufficient

    getMessage(0) #

    An alias for getAlert to get the notification's main message string

    getSound(0) #

    Gets the sound string from the aps object

    getAlert(0) #

    Gets the notification's main message from the aps object

    getBadgeCount(0) #

    Gets the badge count number from the aps object

    getData(0) #

    Gets the data object on the notif

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -220,7 +224,7 @@ exports.examples render(): ReactElement<any> { return <NotificationPermissionExample />; } -}];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/refreshcontrol.html b/docs/refreshcontrol.html index f525b66ae38..b99b294c514 100644 --- a/docs/refreshcontrol.html +++ b/docs/refreshcontrol.html @@ -1,4 +1,4 @@ -RefreshControl – React Native | A framework for building native apps using React

    RefreshControl #

    Edit on GitHub

    This component is used inside a ScrollView or ListView to add pull to refresh +RefreshControl – React Native | A framework for building native apps using React

    RefreshControl #

    Edit on GitHub

    This component is used inside a ScrollView or ListView to add pull to refresh functionality. When the ScrollView is at scrollY: 0, swiping down triggers an onRefresh event.

    Usage example #

    class RefreshableList extends Component { constructor(props) { @@ -32,7 +32,7 @@ triggers an onRefresh event.

    } ... }

    Note: refreshing is a controlled prop, this is why it needs to be set to true -in the onRefresh function otherwise the refresh indicator will stop immediatly.

    Props #

    onRefresh function #

    Called when the view starts refreshing.

    refreshing bool #

    Whether the view should be indicating an active refresh.

    androidcolors [color] #

    The colors (at least one) that will be used to draw the refresh indicator.

    androidenabled bool #

    Whether the pull to refresh functionality is enabled.

    androidprogressBackgroundColor color #

    The background color of the refresh indicator.

    androidprogressViewOffset number #

    Progress view top offset

    androidsize enum(RefreshLayoutConsts.SIZE.DEFAULT, RefreshLayoutConsts.SIZE.LARGE) #

    Size of the refresh indicator, see RefreshControl.SIZE.

    iostintColor color #

    The color of the refresh indicator.

    iostitle string #

    The title displayed under the refresh indicator.

    iostitleColor color #

    Title color.

    Examples #

    Edit on GitHub
    'use strict'; +in the onRefresh function otherwise the refresh indicator will stop immediately.

    Props #

    onRefresh function #

    Called when the view starts refreshing.

    refreshing bool #

    Whether the view should be indicating an active refresh.

    androidcolors [color] #

    The colors (at least one) that will be used to draw the refresh indicator.

    androidenabled bool #

    Whether the pull to refresh functionality is enabled.

    androidprogressBackgroundColor color #

    The background color of the refresh indicator.

    androidprogressViewOffset number #

    Progress view top offset

    androidsize enum(RefreshLayoutConsts.SIZE.DEFAULT, RefreshLayoutConsts.SIZE.LARGE) #

    Size of the refresh indicator, see RefreshControl.SIZE.

    iostintColor color #

    The color of the refresh indicator.

    iostitle string #

    The title displayed under the refresh indicator.

    iostitleColor color #

    Title color.

    Examples #

    Edit on GitHub
    'use strict'; const React = require('react'); const ReactNative = require('react-native'); @@ -144,7 +144,7 @@ const RefreshControlExample = React}, }); -module.exports = RefreshControlExample;
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/running-on-device-android.html b/docs/running-on-device-android.html index 578e178cfd6..d298e66041e 100644 --- a/docs/running-on-device-android.html +++ b/docs/running-on-device-android.html @@ -1,7 +1,7 @@ -Running On Device – React Native | A framework for building native apps using React

    Running On Device #

    Edit on GitHub

    Prerequisite: USB Debugging #

    You'll need this in order to install your app on your device. First, make sure you have USB debugging enabled on your device.

    Check that your device has been successfully connected by running adb devices:

    $ adb devices +Running On Device – React Native | A framework for building native apps using React

    Running On Device #

    Edit on GitHub

    Prerequisite: USB Debugging #

    You'll need this in order to install your app on your device. First, make sure you have USB debugging enabled on your device.

    Check that your device has been successfully connected by running adb devices:

    $ adb devices List of devices attached emulator-5554 offline # Google emulator -14ed2fcc device # Physical device

    Seeing device in the right column means the device is connected. Android - go figure :) You must have only one device connected.

    Now you can use react-native run-android to install and launch your app on the device.

    Setting up an Android Device #

    Let's now set up an Android device to run our React Native projects.

    First thing is to plug in your device and check the manufacturer code by using lsusb, which should output something like this:

    $ lsusb +14ed2fcc device # Physical device

    Seeing device in the right column means the device is connected. Android - go figure :) You must have only one device connected.

    Now you can use react-native run-android to install and launch your app on the device. If you get a "bridge configuration isn't available" error, see the Using adb reverse section below.

    Setting up an Android Device #

    Let's now set up an Android device to run our React Native projects.

    First thing is to plug in your device and check the manufacturer code by using lsusb, which should output something like this:

    $ lsusb Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 22b8:2e76 Motorola PCS @@ -15,7 +15,13 @@ Bus 001 Device 002< Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    You'll see that after removing the phone, the line which has the phone model ("Motorola PCS" in this case) disappeared from the list. This is the line that we care about.

    Bus 001 Device 003: ID 22b8:2e76 Motorola PCS

    From the above line, you want to grab the first four digits from the device ID:

    22b8:2e76

    In this case, it's 22b8. That's the identifier for Motorola.

    You'll need to input this into your udev rules in order to get up and running:

    echo SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", MODE="0666", GROUP="plugdev" | sudo tee /etc/udev/rules.d/51-android-usb.rules

    Make sure that you replace 22b8 with the identifier you get in the above command.

    Now check that your device is properly connecting to ADB, the Android Debug Bridge, by using adb devices.

    List of devices attached -TA9300GLMK device

    Accessing development server from device #

    You can also iterate quickly on device using the development server. Follow one of the steps described below to make your development server running on your laptop accessible for your device.

    Hint

    Most modern android devices don't have a hardware menu button, which we use to trigger the developer menu. In that case you can shake the device to open the dev menu (to reload, debug, etc.). Alternatively, you can run the command adb shell input keyevent 82 to open the dev menu (82 being the Menu key code).

    Using adb reverse #

    Note that this option is available on devices running android 5.0+ (API 21).

    Have your device connected via USB with debugging enabled (see paragraph above on how to enable USB debugging on your device).

    1. Run adb reverse tcp:8081 tcp:8081
    2. You can use Reload JS and other development options with no extra configuration

    Configure your app to connect to the local dev server via Wi-Fi #

    1. Make sure your laptop and your phone are on the same Wi-Fi network.
    2. Open your React Native app on your device. You can do this the same way you'd open any other app.
    3. You'll see a red screen with an error. This is OK. The following steps will fix that.
    4. Open the Developer menu by shaking the device or running adb shell input keyevent 82 from the command line.
    5. Go to Dev Settings.
    6. Go to Debug server host for device.
    7. Type in your machine's IP address and the port of the local dev server (e.g. 10.0.1.1:8081). On Mac, you can find the IP address in System Preferences / Network. On Windows, open the command prompt and type ipconfig to find your machine's IP address (more info).
    8. Go back to the Developer menu and select Reload JS.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/running-on-device-ios.html b/docs/running-on-device-ios.html index fb41d17566d..fc7789826f3 100644 --- a/docs/running-on-device-ios.html +++ b/docs/running-on-device-ios.html @@ -1,4 +1,4 @@ -Running On Device – React Native | A framework for building native apps using React

    Running On Device #

    Edit on GitHub

    Note that running on device requires Apple Developer account and provisioning your iPhone. This guide covers only React Native specific topic.

    Accessing development server from device #

    You can iterate quickly on device using development server. To do that, your laptop and your phone have to be on the same wifi network.

    1. Open AwesomeApp/ios/AwesomeApp/AppDelegate.m
    2. Change the IP in the URL from localhost to your laptop's IP. On Mac, you can find the IP address in System Preferences / Network.
    3. Temporarily disable App Transport Security (ATS) by adding the NSAllowsArbitraryLoads entry to your Info.plist file. Since ATS does not allow insecure HTTP requests to IP addresses, you must completely disable it to run on a device. This is only a requirement for development on a device, and unless you can't workaround an issue you should leave ATS enabled for production builds. For more information, see this post on configuring ATS.
    4. In Xcode select your phone as build target and press "Build and run"

    Hint

    Shake the device to open development menu (reload, debug, etc.)

    Using offline bundle #

    When you run your app on device, we pack all the JavaScript code and the images used into the app's resources. This way you can test it without development server running and submit the app to the AppStore.

    1. Open AwesomeApp/ios/AwesomeApp/AppDelegate.m
    2. Uncomment jsCodeLocation = [[NSBundle mainBundle] ...
    3. The JS bundle will be built for dev or prod depending on your app's scheme (Debug = development build with warnings, Release = minified prod build with perf optimizations). To change the scheme navigate to Product > Scheme > Edit Scheme... in xcode and change Build Configuration between Debug and Release.

    Disabling in-app developer menu #

    When building your app for production, your app's scheme should be set to Release as detailed in the debugging documentation in order to disable the in-app developer menu.

    Troubleshooting #

    If curl command fails make sure the packager is running. Also try adding --ipv4 flag to the end of it.

    Note that since v0.14 JS and images are automatically packaged into the iOS app using Bundle React Native code and images Xcode build phase.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.

    Running On Device #

    Edit on GitHub

    Running an iOS app on a device requires an Apple Developer account and provisioning your iPhone. This guide covers only React Native specific topics.

    Accessing the development server from device #

    You can iterate quickly on device using the development server. First, ensure that you are on the same Wi-Fi network as your computer.

    1. Open ios/YourApp/AppDelegate.m
    2. Change the host in the URL from localhost to your laptop's IP address. On Mac, you can find the IP address in System Preferences / Network.
    3. In Xcode, select your phone as build target and press "Build and run"

    Hint

    Shake the device to open the developer menu.

    Building your app for production #

    You have built a great app using React Native, and you are now itching to release it in the App Store. The process is the same as any other native iOS app, with some additional considerations to take into account.

    Disabling the developer menu #

    Building an app for distribution in the App Store requires using the Release scheme in Xcode. Apps built for Release will automatically disable the in-app developer menu. This will prevent your users from inadvertently accessing the menu in production.

    Using the offline bundle #

    Set up your app to load your JavaScript, images, and other static assets from its resource bundle rather than the development server. This way you can test the app independently of the development server, and will allow you to distribute the app to beta testers and submit the app to the App Store.

    1. Open ios/YourApp/AppDelegate.m
    2. Uncomment the line, jsCodeLocation = [[NSBundle mainBundle] ...

    App Transport Security #

    App Transport Security is a security feature, added in iOS 9, that rejects all HTTP requests that are not sent over HTTPS. This can result in HTTP traffic being blocked, including the developer React Native server.

    ATS is disabled by default in projects generated using the React Native CLI in order to make development easier. You should re-enable ATS prior to building your app for production by removing the NSAllowsArbitraryLoads entry from your Info.plist file in the ios/ folder.

    To learn more about how to configure ATS on your own Xcode projects, see this post on ATS.

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/running-on-simulator-ios.html b/docs/running-on-simulator-ios.html new file mode 100644 index 00000000000..5ce5e54b67f --- /dev/null +++ b/docs/running-on-simulator-ios.html @@ -0,0 +1,19 @@ +Running On Simulator – React Native | A framework for building native apps using React

    Running On Simulator #

    Edit on GitHub

    Starting the simulator #

    Once you have your React Native project initialized, you can run react-native run-ios inside the newly created project directory. If everything is set up correctly, you should see your new app running in the iOS Simulator shortly.

    Specifying a device #

    You can specify the device the simulator should run with the --simulator flag, followed by the device name as a string. The default is "iPhone 6". If you wish to run your app on an iPhone 4s, just run react-native run-ios --simulator "iPhone 4s".

    The device names correspond to the list of devices available in Xcode. You can check your available devices by running xcrun simctl list devices from the console.

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/sample-application-movies.html b/docs/sample-application-movies.html deleted file mode 100644 index cd0faf0786a..00000000000 --- a/docs/sample-application-movies.html +++ /dev/null @@ -1,317 +0,0 @@ -Movie Fetcher – React Native | A framework for building native apps using React

    Movie Fetcher #

    Edit on GitHub

    Overview #

    In this tutorial we'll be building a simple version of a Movies app that fetches 25 movies that are in theaters and displays them in a ListView.

    Setup #

    This sample application requires the basic setup explained at -React Native Getting Started.

    After installing these dependencies there are two simple commands to get a React Native project all set up for development.

    1. npm install -g react-native-cli

      react-native-cli is a command line interface that does the rest of the set up. It’s installable via npm. This will install react-native as a command in your terminal. You only ever need to do this once.

    2. react-native init SampleAppMovies

      This command fetches the React Native source code and dependencies and then creates a new Xcode project in SampleAppMovies/iOS/SampleAppMovies.xcodeproj and a gradle project in SampleAppMovies/android/app.

    Starting the app on iOS #

    Open this new project (SampleAppMovies/ios/SampleAppMovies.xcodeproj) in Xcode and simply build and run it with ⌘+R. Doing so will also start a Node server which enables live code reloading. With this you can see your changes by pressing ⌘+R in the simulator rather than recompiling in Xcode.

    Starting the app on Android #

    In your terminal navigate into the SampleAppMovies and run:

    react-native run-android

    This will install the generated app on your emulator or device, as well as start the Node server which enables live code reloading. To see your changes you have to open the rage-shake-menu (either shake the device or press the menu button on devices, press F2 or Page Up for emulator, ⌘+M for Genymotion), and then press Reload JS.

    Hello World #

    react-native init will generate an app with the name of your project, in this case SampleAppMovies. This is a simple hello world app. For iOS, you can edit index.ios.js to make changes to the app and then press ⌘+R in the simulator to see the changes. For Android, you can edit index.android.js to make changes to the app and press Reload JS from the rage shake menu to see the changes.

    Actual App #

    Now that we have initialized our React Native project, we can begin creating our Movie application.

    Mocking data #

    Before we write the code to fetch actual Rotten Tomatoes data let's mock some data so we can get our hands dirty with React Native. At Facebook we typically declare constants at the top of JS files, just below the imports, but feel free to add the following constant wherever you like. In index.ios.js or index.android.js :

    var MOCKED_MOVIES_DATA = [ - {title: 'Title', year: '2015', posters: {thumbnail: 'http://i.imgur.com/UePbdph.jpg'}}, -];

    Render a movie #

    We're going to render the title, year, and thumbnail for the movie. Since thumbnail is an Image component in React Native, add Image to the list of React imports below.

    import React, { - Component, -} from 'react'; -import { - AppRegistry, - Image, - StyleSheet, - Text, - View, -} from 'react-native';

    Now change the render function so that we're rendering the data mentioned above rather than hello world.

    render() { - var movie = MOCKED_MOVIES_DATA[0]; - return ( - <View style={styles.container}> - <Text>{movie.title}</Text> - <Text>{movie.year}</Text> - <Image source={{uri: movie.posters.thumbnail}} /> - </View> - ); - }

    Press ⌘+R / Reload JS and you should see "Title" above "2015". Notice that the Image doesn't render anything. This is because we haven't specified the width and height of the image we want to render. This is done via styles. While we're changing the styles let's also clean up the styles we're no longer using.

    var styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: '#F5FCFF', - }, - thumbnail: { - width: 53, - height: 81, - }, -});

    And lastly we need to apply this style to the Image component:

    <Image - source={{uri: movie.posters.thumbnail}} - style={styles.thumbnail} - />

    Press ⌘+R / Reload JS and the image should now render.

    - - -
    - - -

    Add some styling #

    Great, we've rendered our data. Now let's make it look better. I'd like to put the text to the right of the image and make the title larger and centered within that area:

    +---------------------------------+ -|+-------++----------------------+| -|| || Title || -|| Image || || -|| || Year || -|+-------++----------------------+| -+---------------------------------+

    We'll need to add another container in order to vertically lay out components within horizontally laid out components.

    return ( - <View style={styles.container}> - <Image - source={{uri: movie.posters.thumbnail}} - style={styles.thumbnail} - /> - <View style={styles.rightContainer}> - <Text style={styles.title}>{movie.title}</Text> - <Text style={styles.year}>{movie.year}</Text> - </View> - </View> - );

    Not too much has changed, we added a container around the Texts and then moved them after the Image (because they're to the right of the Image). Let's see what the style changes look like:

    container: { - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - backgroundColor: '#F5FCFF', - },

    We use FlexBox for layout - see this great guide to learn more about it.

    In the above code snippet, we simply added flexDirection: 'row' that will make children of our main container to be layed out horizontally instead of vertically.

    Now add another style to the JS style object:

    rightContainer: { - flex: 1, - },

    This means that the rightContainer takes up the remaining space in the parent container that isn't taken up by the Image. If this doesn't make sense, add a backgroundColor to rightContainer and then try removing the flex: 1. You'll see that this causes the container's size to be the minimum size that fits its children.

    Styling the text is pretty straightforward:

    title: { - fontSize: 20, - marginBottom: 8, - textAlign: 'center', - }, - year: { - textAlign: 'center', - },

    Go ahead and press ⌘+R / Reload JS and you'll see the updated view.

    - - -
    - -

    Fetching real data #

    Fetching data from Rotten Tomatoes's API isn't really relevant to learning React Native so feel free to breeze through this section.

    Add the following constants to the top of the file (typically below the imports) to create the REQUEST_URLs used to request data with.

    /** - * For quota reasons we replaced the Rotten Tomatoes' API with a sample data of - * their very own API that lives in React Native's Github repo. - */ -var REQUEST_URL = 'https://raw.githubusercontent.com/facebook/react-native/master/docs/MoviesExample.json';

    Add some initial state to our application so that we can check this.state.movies === null to determine whether the movies data has been loaded or not. We can set this data when the response comes back with this.setState({movies: moviesData}). Add this code just above the render function inside our React class.

    constructor(props) { - super(props); - this.state = { - movies: null, - }; - }

    We want to send off the request after the component has finished loading. componentDidMount is a function of React components that React will call exactly once, just after the component has been loaded.

    componentDidMount() { - this.fetchData(); - }

    Now add fetchData function used above to our main component. This method will be responsible for handling data fetching. All you need to do is call this.setState({movies: data}) after resolving the promise chain because the way React works is that setState actually triggers a re-render and then the render function will notice that this.state.movies is no longer null. Note that we call done() at the end of the promise chain - always make sure to call done() or any errors thrown will get swallowed.

    fetchData() { - fetch(REQUEST_URL) - .then((response) => response.json()) - .then((responseData) => { - this.setState({ - movies: responseData.movies, - }); - }) - .done(); - }

    Now modify the render function to render a loading view if we don't have any movies data, and to render the first movie otherwise.

    render() { - if (!this.state.movies) { - return this.renderLoadingView(); - } - - var movie = this.state.movies[0]; - return this.renderMovie(movie); - } - - renderLoadingView() { - return ( - <View style={styles.container}> - <Text> - Loading movies... - </Text> - </View> - ); - } - - renderMovie(movie) { - return ( - <View style={styles.container}> - <Image - source={{uri: movie.posters.thumbnail}} - style={styles.thumbnail} - /> - <View style={styles.rightContainer}> - <Text style={styles.title}>{movie.title}</Text> - <Text style={styles.year}>{movie.year}</Text> - </View> - </View> - ); - }

    Now press ⌘+R / Reload JS and you should see "Loading movies..." until the response comes back, then it will render the first movie it fetched from Rotten Tomatoes.

    - - -
    - -

    ListView #

    Let's now modify this application to render all of this data in a ListView component, rather than just rendering the first movie.

    Why is a ListView better than just rendering all of these elements or putting them in a ScrollView? Despite React being fast, rendering a possibly infinite list of elements could be slow. ListView schedules rendering of views so that you only display the ones on screen and those already rendered but off screen are removed from the native view hierarchy.

    First things first: add the ListView import to the top of the file.

    import React, { - Component, -} from 'react'; -import { - AppRegistry, - Image, - ListView, - StyleSheet, - Text, - View, -} from 'react-native';

    Now modify the render function so that once we have our data it renders a ListView of movies instead of a single movie.

    render() { - if (!this.state.loaded) { - return this.renderLoadingView(); - } - - return ( - <ListView - dataSource={this.state.dataSource} - renderRow={this.renderMovie} - style={styles.listView} - /> - ); - }

    The dataSource is an interface that ListView is using to determine which rows have changed over the course of updates.

    You'll notice we used dataSource from this.state. The next step is to add an empty dataSource to the object returned by constructor. Also, now that we're storing the data in dataSource, we should no longer use this.state.movies to avoid storing data twice. We can use boolean property of the state (this.state.loaded) to tell whether data fetching has finished.

    constructor(props) { - super(props); - this.state = { - dataSource: new ListView.DataSource({ - rowHasChanged: (row1, row2) => row1 !== row2, - }), - loaded: false, - }; - }

    And here is the modified fetchData method that updates the state accordingly:

    fetchData() { - fetch(REQUEST_URL) - .then((response) => response.json()) - .then((responseData) => { - this.setState({ - dataSource: this.state.dataSource.cloneWithRows(responseData.movies), - loaded: true, - }); - }) - .done(); - }

    Finally, we add styles for the ListView component to the styles JS object:

    listView: { - paddingTop: 20, - backgroundColor: '#F5FCFF', - },

    And here's the final result:

    - - -
    - -

    There's still some work to be done to make it a fully functional app such as: adding navigation, search, infinite scroll loading, etc. Check the Movies Example to see it all working.

    Final source code #

    /** - * Sample React Native App - * https://github.com/facebook/react-native - */ - -import React, { - Component, -} from 'react'; -import { - AppRegistry, - Image, - ListView, - StyleSheet, - Text, - View, -} from 'react-native'; - -var REQUEST_URL = 'https://raw.githubusercontent.com/facebook/react-native/master/docs/MoviesExample.json'; - -class SampleAppMovies extends Component { - constructor(props) { - super(props); - this.state = { - dataSource: new ListView.DataSource({ - rowHasChanged: (row1, row2) => row1 !== row2, - }), - loaded: false, - }; - } - - componentDidMount() { - this.fetchData(); - } - - fetchData() { - fetch(REQUEST_URL) - .then((response) => response.json()) - .then((responseData) => { - this.setState({ - dataSource: this.state.dataSource.cloneWithRows(responseData.movies), - loaded: true, - }); - }) - .done(); - } - - render() { - if (!this.state.loaded) { - return this.renderLoadingView(); - } - - return ( - <ListView - dataSource={this.state.dataSource} - renderRow={this.renderMovie} - style={styles.listView} - /> - ); - } - - renderLoadingView() { - return ( - <View style={styles.container}> - <Text> - Loading movies... - </Text> - </View> - ); - } - - renderMovie(movie) { - return ( - <View style={styles.container}> - <Image - source={{uri: movie.posters.thumbnail}} - style={styles.thumbnail} - /> - <View style={styles.rightContainer}> - <Text style={styles.title}>{movie.title}</Text> - <Text style={styles.year}>{movie.year}</Text> - </View> - </View> - ); - } -} - -var styles = StyleSheet.create({ - container: { - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - backgroundColor: '#F5FCFF', - }, - rightContainer: { - flex: 1, - }, - title: { - fontSize: 20, - marginBottom: 8, - textAlign: 'center', - }, - year: { - textAlign: 'center', - }, - thumbnail: { - width: 53, - height: 81, - }, - listView: { - paddingTop: 20, - backgroundColor: '#F5FCFF', - }, -}); - -AppRegistry.registerComponent('SampleAppMovies', () => SampleAppMovies);

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/scrollview.html b/docs/scrollview.html index e67c6f9e368..59579541722 100644 --- a/docs/scrollview.html +++ b/docs/scrollview.html @@ -1,4 +1,4 @@ -ScrollView – React Native | A framework for building native apps using React

    ScrollView #

    Edit on GitHub

    Component that wraps platform ScrollView while providing +ScrollView – React Native | A framework for building native apps using React

    ScrollView #

    Edit on GitHub

    Component that wraps platform ScrollView while providing integration with touch locking "responder" system.

    Keep in mind that ScrollViews must have a bounded height in order to work, since they contain unbounded-height children into a bounded container (via a scroll interaction). In order to bound the height of a ScrollView, either @@ -92,9 +92,9 @@ with snapToAlignment.

    ioszoomScale number #

    The current scale of the scroll view content. The default value is 1.0.

    Methods #

    scrollTo(y: number | { x?: number, y?: number, animated?: boolean }, x: number, animated: boolean) #

    Scrolls to a given x, y offset, either immediately or with a smooth animation.

    Syntax:

    scrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})

    Note: The weird argument signature is due to the fact that, for historical reasons, +with horizontal={true}.

    ioszoomScale number #

    The current scale of the scroll view content. The default value is 1.0.

    Methods #

    scrollTo(y?, x?, animated?) #

    Scrolls to a given x, y offset, either immediately or with a smooth animation.

    Syntax:

    scrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})

    Note: The weird argument signature is due to the fact that, for historical reasons, the function also accepts separate arguments as as alternative to the options object. -This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.

    scrollWithoutAnimationTo(y, x) #

    Deprecated, do not use.

    Examples #

    Edit on GitHub
    'use strict'; +This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.

    scrollWithoutAnimationTo(y, x) #

    Deprecated, do not use.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -212,7 +212,7 @@ THUMBS = THUMBS: 64, height: 64, } -});
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/segmentedcontrolios.html b/docs/segmentedcontrolios.html index 77cac4ba943..75e91995eaf 100644 --- a/docs/segmentedcontrolios.html +++ b/docs/segmentedcontrolios.html @@ -1,4 +1,4 @@ -SegmentedControlIOS – React Native | A framework for building native apps using React

    SegmentedControlIOS #

    Edit on GitHub

    Use SegmentedControlIOS to render a UISegmentedControl iOS.

    Programmatically changing selected index #

    The selected index can be changed on the fly by assigning the +SegmentedControlIOS – React Native | A framework for building native apps using React

    SegmentedControlIOS #

    Edit on GitHub

    Use SegmentedControlIOS to render a UISegmentedControl iOS.

    Programmatically changing selected index #

    The selected index can be changed on the fly by assigning the selectIndex prop to a state variable, then changing that variable. Note that the state variable would need to be updated as the user selects a value and changes the index, as shown in the example below.

    <SegmentedControlIOS @@ -11,7 +11,7 @@ selects a value and changes the index, as shown in the example below.

    momentary bool #

    If true, then selecting a segment won't persist visually. The onValueChange callback will still work as expected.

    onChange function #

    Callback that is called when the user taps a segment; passes the event as an argument

    onValueChange function #

    Callback that is called when the user taps a segment; -passes the segment's value as an argument

    selectedIndex number #

    The index in props.values of the segment to be (pre)selected.

    tintColor string #

    Accent color of the control.

    values [string] #

    The labels for the control's segment buttons, in order.

    Examples #

    Edit on GitHub
    'use strict'; +passes the segment's value as an argument

    selectedIndex number #

    The index in props.values of the segment to be (pre)selected.

    tintColor string #

    Accent color of the control.

    values [string] #

    The labels for the control's segment buttons, in order.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -165,7 +165,7 @@ exports.examples : 'Change events can be detected', render(): ReactElement<any> { return <EventSegmentedControlExample />; } } -];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/shadow-props.html b/docs/shadow-props.html new file mode 100644 index 00000000000..55e99d3f70f --- /dev/null +++ b/docs/shadow-props.html @@ -0,0 +1,19 @@ +Shadow Props – React Native | A framework for building native apps using React

    Shadow Props #

    Edit on GitHub

    Props #

    iosshadowColor color #

    Sets the drop shadow color

    iosshadowOffset {width: number, height: number} #

    Sets the drop shadow offset

    iosshadowOpacity number #

    Sets the drop shadow opacity (multiplied by the color's alpha component)

    iosshadowRadius number #

    Sets the drop shadow blur radius

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/shadowproptypesios.html b/docs/shadowproptypesios.html deleted file mode 100644 index 7a57edf5b53..00000000000 --- a/docs/shadowproptypesios.html +++ /dev/null @@ -1,19 +0,0 @@ -ShadowPropTypesIOS – React Native | A framework for building native apps using React

    ShadowPropTypesIOS #

    Edit on GitHub

    Props #

    shadowColor color #

    shadowOffset {width: number, height: number} #

    shadowOpacity number #

    shadowRadius number #

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/signed-apk-android.html b/docs/signed-apk-android.html index c7bb9c3468b..3171165a232 100644 --- a/docs/signed-apk-android.html +++ b/docs/signed-apk-android.html @@ -1,7 +1,7 @@ -Generating Signed APK – React Native | A framework for building native apps using React

    Generating Signed APK #

    Edit on GitHub

    Android requires that all apps be digitally signed with a certificate before they can be installed, so to distribute your Android application via Google Play store, you'll need to generate a signed release APK. The Signing Your Applications page on Android Developers documentation describes the topic in detail. This guide covers the process in brief, as well as lists the steps required to packaging the JavaScript bundle.

    Generating a signing key #

    You can generate a private signing key using keytool.

    $ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

    This command prompts you for passwords for the keystore and key, and to provide the Distinguished Name fields for your key. It then generates the keystore as a file called my-release-key.keystore.

    The keystore contains a single key, valid for 10000 days. The alias is a name that you will use later when signing your app, so remember to take note of the alias.

    Note: Remember to keep your keystore file private and never commit it to version control.

    Setting up gradle variables #

    1. Place the my-release-key.keystore file under the android/app directory in your project folder.
    2. Edit the file ~/.gradle/gradle.properties and add the following (replace ***** with the correct keystore password, alias and key password),
    MYAPP_RELEASE_STORE_FILE=my-release-key.keystore +Generating Signed APK – React Native | A framework for building native apps using React

    Generating Signed APK #

    Edit on GitHub

    Android requires that all apps be digitally signed with a certificate before they can be installed, so to distribute your Android application via Google Play store, you'll need to generate a signed release APK. The Signing Your Applications page on Android Developers documentation describes the topic in detail. This guide covers the process in brief, as well as lists the steps required to packaging the JavaScript bundle.

    Generating a signing key #

    You can generate a private signing key using keytool.

    $ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

    This command prompts you for passwords for the keystore and key, and to provide the Distinguished Name fields for your key. It then generates the keystore as a file called my-release-key.keystore.

    The keystore contains a single key, valid for 10000 days. The alias is a name that you will use later when signing your app, so remember to take note of the alias.

    Note: Remember to keep your keystore file private and never commit it to version control.

    Setting up gradle variables #

    1. Place the my-release-key.keystore file under the android/app directory in your project folder.
    2. Edit the file ~/.gradle/gradle.properties and add the following (replace ***** with the correct keystore password, alias and key password),
    MYAPP_RELEASE_STORE_FILE=my-release-key.keystore MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD=***** -MYAPP_RELEASE_KEY_PASSWORD=*****

    These are going to be global gradle variables, which we can later use in our gradle config to sign our app.

    Note about saving the keystore: Once you publish the app on the Play Store, you will need to republish your app under a different package name (losing all downloads and ratings) if you want to change the signing key at any point. So backup your keystore and don't forget the passwords.

    Note about security: If you are not keen on storing your passwords in plaintext and you are running OSX, you can also store your credentials in the Keychain Access app. Then you can skip the two last rows in ~/.gradle/gradle.properties.

    Adding signing config to your app's gradle config #

    Edit the file android/app/build.gradle in your project folder and add the signing config,

    ... +MYAPP_RELEASE_KEY_PASSWORD=*****

    These are going to be global gradle variables, which we can later use in our gradle config to sign our app.

    Note about saving the keystore:

    Once you publish the app on the Play Store, you will need to republish your app under a different package name (losing all downloads and ratings) if you want to change the signing key at any point. So backup your keystore and don't forget the passwords.

    Note about security: If you are not keen on storing your passwords in plaintext and you are running OSX, you can also store your credentials in the Keychain Access app. Then you can skip the two last rows in ~/.gradle/gradle.properties.

    Adding signing config to your app's gradle config #

    Edit the file android/app/build.gradle in your project folder and add the signing config,

    ... android { ... defaultConfig { ... } @@ -23,7 +23,7 @@ android { ...

    Generating the release APK #

    Simply run the following in a terminal:

    $ cd android && ./gradlew assembleRelease

    Gradle's assembleRelease will bundle all the JavaScript needed to run your app into the APK. If you need to change the way the JavaScript bundle and/or drawable resources are bundled (e.g. if you changed the default file/folder names or the general structure of the project), have a look at android/app/build.gradle to see how you can update it to reflect these changes.

    The generated APK can be found under android/app/build/outputs/apk/app-release.apk, and is ready to be distributed.

    Testing the release build of your app #

    Before uploading the release build to the Play Store, make sure you test it thoroughly. Install it on the device using:

    $ cd android && ./gradlew installRelease

    Note that installRelease is only available if you've set up signing as described above.

    You can kill any running packager instances, all your and framework JavaScript code is bundled in the APK's assets.

    Enabling Proguard to reduce the size of the APK (optional) #

    Proguard is a tool that can slightly reduce the size of the APK. It does this by stripping parts of the React Native Java bytecode (and its dependencies) that your app is not using.

    IMPORTANT: Make sure to thoroughly test your app if you've enabled Proguard. Proguard often requires configuration specific to each native library you're using. See app/proguard-rules.pro.

    To enable Proguard, edit android/app/build.gradle:

    /** * Run Proguard to shrink the Java bytecode in release builds. */ -def enableProguardInReleaseBuilds = true

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/slider.html b/docs/slider.html index a5a685928a7..b97ec851346 100644 --- a/docs/slider.html +++ b/docs/slider.html @@ -1,4 +1,4 @@ -Slider – React Native | A framework for building native apps using React

    Slider #

    Edit on GitHub

    A component used to select a single value from a range of values.

    Props #

    disabled bool #

    If true the user won't be able to move the slider. +Slider – React Native | A framework for building native apps using React

    Slider #

    Edit on GitHub

    A component used to select a single value from a range of values.

    Props #

    disabled bool #

    If true the user won't be able to move the slider. Default value is false.

    maximumValue number #

    Initial maximum value of the slider. Default value is 1.

    minimumValue number #

    Initial minimum value of the slider. Default value is 0.

    onSlidingComplete function #

    Callback called when the user finishes changing the value (e.g. when the slider is released).

    onValueChange function #

    Callback continuously called while the user is dragging the slider.

    step number #

    Step value of the slider. The value should be between 0 and (maximumValue - minimumValue). @@ -11,7 +11,7 @@ leftmost pixel of the image will be stretched to fill the track.

    default blue gradient image.

    iosminimumTrackImage Image.propTypes.source #

    Assigns a minimum track image. Only static images are supported. The rightmost pixel of the image will be stretched to fill the track.

    iosminimumTrackTintColor string #

    The color used for the track to the left of the button. Overrides the default blue gradient image.

    iosthumbImage Image.propTypes.source #

    Sets an image for the thumb. Only static images are supported.

    iostrackImage Image.propTypes.source #

    Assigns a single image for the track. Only static images are supported. -The center pixel of the image will be stretched to fill the track.

    Examples #

    Edit on GitHub
    'use strict'; +The center pixel of the image will be stretched to fill the track.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -165,7 +165,7 @@ exports.examples ); } }, -];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/sliderios.html b/docs/sliderios.html index eb28a1bb55a..3dc7039a6a8 100644 --- a/docs/sliderios.html +++ b/docs/sliderios.html @@ -1,4 +1,4 @@ -SliderIOS – React Native | A framework for building native apps using React

    SliderIOS #

    Edit on GitHub

    Note: SliderIOS is deprecated and will be removed in the future. Use the cross-platform +SliderIOS – React Native | A framework for building native apps using React

    SliderIOS #

    Edit on GitHub

    Note: SliderIOS is deprecated and will be removed in the future. Use the cross-platform Slider as a drop-in replacement with the same API.

    An iOS-specific component used to select a single value from a range of values.

    Props #

    disabled bool #

    If true the user won't be able to move the slider. Default value is false.

    maximumTrackImage Image.propTypes.source #

    Assigns a maximum track image. Only static images are supported. The leftmost pixel of the image will be stretched to fill the track.

    maximumTrackTintColor string #

    The color used for the track to the right of the button. Overrides the @@ -12,7 +12,7 @@ Default value is 0.

    value number #

    Initial value of the slider. The value should be between minimumValue and maximumValue, which default to 0 and 1 respectively. Default value is 0.

    This is not a controlled component, e.g. if you don't update -the value, the component won't be reset to its initial value.

    Examples #

    Edit on GitHub
    'use strict'; +the value, the component won't be reset to its initial value.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -118,7 +118,7 @@ exports.examples ); } }, -];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/state.html b/docs/state.html new file mode 100644 index 00000000000..455903e8d7b --- /dev/null +++ b/docs/state.html @@ -0,0 +1,54 @@ +State – React Native | A framework for building native apps using React

    State #

    Edit on GitHub

    There are two types of data that control a component: props and state. props are set by the parent and they are fixed throughout the lifetime of a component. For data that is going to change, we have to use state.

    In general, you should initialize state in the constructor, and then call setState when you want to change it.

    For example, let's say we want to make text that blinks all the time. The text itself gets set once when the blinking component gets created, so the text itself is a prop. The "whether the text is currently on or off" changes over time, so that should be kept in state.

    import React, { Component } from 'react'; +import { AppRegistry, Text, View } from 'react-native'; + +class Blink extends Component { + constructor(props) { + super(props); + this.state = {showText: true}; + + // Toggle the state every second + setInterval(() => { + this.setState({ showText: !this.state.showText }); + }, 1000); + } + + render() { + let display = this.state.showText ? this.props.text : ' '; + return ( + <Text>{display}</Text> + ); + } +} + +class BlinkApp extends Component { + render() { + return ( + <View> + <Blink text='I love to blink' /> + <Blink text='Yes blinking is so great' /> + <Blink text='Why did they ever take this out of HTML' /> + <Blink text='Look at me look at me look at me' /> + </View> + ); + } +} + +AppRegistry.registerComponent('BlinkApp', () => BlinkApp);

    In a real application, you probably won't be setting state with a timer. You might set state when you have new data arrive from the server, or from user input. You can also use a state container like Redux to control your data flow. In that case you would use Redux to modify your state rather than calling setState directly.

    State works the same way as it does in React, so for more details on handling state, you can look at the React.Component API.

    At this point, you might be annoyed that most of our examples so far use boring default black text. To make things more beautiful, you will have to learn about Style.

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/statusbar.html b/docs/statusbar.html index d02286cc99d..4c67e22331a 100644 --- a/docs/statusbar.html +++ b/docs/statusbar.html @@ -1,4 +1,4 @@ -StatusBar – React Native | A framework for building native apps using React

    StatusBar #

    Edit on GitHub

    Component to control the app status bar.

    Usage with Navigator #

    It is possible to have multiple StatusBar components mounted at the same +StatusBar – React Native | A framework for building native apps using React

    StatusBar #

    Edit on GitHub

    Component to control the app status bar.

    Usage with Navigator #

    It is possible to have multiple StatusBar components mounted at the same time. The props will be merged in the order the StatusBar components were mounted. One use case is to specify status bar styles per route using Navigator.

    <View> <StatusBar @@ -22,7 +22,8 @@ the next render.

    Props

    hidden bool #

    If the status bar is hidden.

    androidbackgroundColor color #

    The background color of the status bar.

    androidtranslucent bool #

    If the status bar is translucent. When translucent is set to true, the app will draw under the status bar. This is useful when using a semi transparent status bar color.

    iosbarStyle enum('default', 'light-content') #

    Sets the color of the status bar text.

    iosnetworkActivityIndicatorVisible bool #

    If the network activity indicator should be visible.

    iosshowHideTransition enum('fade', 'slide') #

    The transition effect when showing and hiding the status bar using the hidden -prop. Defaults to 'fade'.

    Methods #

    static setHidden(hidden: boolean, animation: 'none' | 'fade' | 'slide') #

    static setBarStyle(style: 'default' | 'light-content', animated: boolean) #

    static setNetworkActivityIndicatorVisible(visible: boolean) #

    static setBackgroundColor(color: string, animated: boolean) #

    static setTranslucent(translucent: boolean) #

    Examples #

    Edit on GitHub
    'use strict'; +prop. Defaults to 'fade'.

    Methods #

    static setHidden(hidden, animation?) #

    Show or hide the status bar

    Parameters:
    Name and TypeDescription
    hidden

    boolean

    The dialog's title.

    [animation]

    Optional animation when + changing the status bar hidden property.

    static setBarStyle(style, animated?) #

    Set the status bar style

    Parameters:
    Name and TypeDescription
    style

    Status bar style to set

    [animated]

    boolean

    Animate the style change.

    static setNetworkActivityIndicatorVisible(visible) #

    Control the visibility of the network activity indicator

    Parameters:
    Name and TypeDescription
    visible

    boolean

    Show the indicator.

    static setBackgroundColor(color, animated?) #

    Set the background color for the status bar

    Parameters:
    Name and TypeDescription
    color

    string

    Background color.

    [animated]

    boolean

    Animate the style change.

    static setTranslucent(translucent) #

    Control the translucency of the status bar

    Parameters:
    Name and TypeDescription
    translucent

    boolean

    Set as translucent.

    Type Definitions #

    StatusBarStyle #

    Status bar style

    Type:
    $Enum

    Constants:
    ValueDescription
    default

    Default status bar style

    light-content

    Dark background style

    StatusBarAnimation #

    Status bar animation

    Type:
    $Enum

    Constants:
    ValueDescription
    none

    No animation

    fade

    Fade animation

    slide

    Slide animation

    Examples #

    Edit on GitHub
    'use strict'; const React = require('react'); const ReactNative = require('react-native'); @@ -475,7 +476,7 @@ exports.examples : 8, fontWeight: 'bold', } -});
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/statusbarios.html b/docs/statusbarios.html index 196b5447f9d..70f6afb7f2c 100644 --- a/docs/statusbarios.html +++ b/docs/statusbarios.html @@ -1,106 +1,4 @@ -StatusBarIOS – React Native | A framework for building native apps using React

    StatusBarIOS #

    Edit on GitHub

    Deprecated. Use StatusBar instead.

    Methods #

    setStyle(style, animated?) #

    setHidden(hidden, animation?) #

    setNetworkActivityIndicatorVisible(visible) #

    Examples #

    Edit on GitHub
    'use strict'; - -var React = require('react'); -var ReactNative = require('react-native'); -var { - StyleSheet, - View, - Text, - TouchableHighlight, - StatusBarIOS, -} = ReactNative; - -exports.framework = 'React'; -exports.title = 'StatusBarIOS'; -exports.description = 'Module for controlling iOS status bar'; -exports.examples = [{ - title: 'Status Bar Style', - render() { - return ( - <View> - {['default', 'light-content'].map((style) => - <TouchableHighlight key={style} style={styles.wrapper} - onPress={() => StatusBarIOS.setStyle(style)}> - <View style={styles.button}> - <Text>setStyle('{style}')</Text> - </View> - </TouchableHighlight> - )} - </View> - ); - }, -}, { - title: 'Status Bar Style Animated', - render() { - return ( - <View> - {['default', 'light-content'].map((style) => - <TouchableHighlight key={style} style={styles.wrapper} - onPress={() => StatusBarIOS.setStyle(style, true)}> - <View style={styles.button}> - <Text>setStyle('{style}', true)</Text> - </View> - </TouchableHighlight> - )} - </View> - ); - }, -}, { - title: 'Status Bar Hidden', - render() { - return ( - <View> - {['none', 'fade', 'slide'].map((animation) => - <View key={animation}> - <TouchableHighlight style={styles.wrapper} - onPress={() => StatusBarIOS.setHidden(true, animation)}> - <View style={styles.button}> - <Text>setHidden(true, '{animation}')</Text> - </View> - </TouchableHighlight> - <TouchableHighlight style={styles.wrapper} - onPress={() => StatusBarIOS.setHidden(false, animation)}> - <View style={styles.button}> - <Text>setHidden(false, '{animation}')</Text> - </View> - </TouchableHighlight> - </View> - )} - </View> - ); - }, -}, { - title: 'Status Bar Network Activity Indicator', - render() { - return ( - <View> - <TouchableHighlight style={styles.wrapper} - onPress={() => StatusBarIOS.setNetworkActivityIndicatorVisible(true)}> - <View style={styles.button}> - <Text>setNetworkActivityIndicatorVisible(true)</Text> - </View> - </TouchableHighlight> - <TouchableHighlight style={styles.wrapper} - onPress={() => StatusBarIOS.setNetworkActivityIndicatorVisible(false)}> - <View style={styles.button}> - <Text>setNetworkActivityIndicatorVisible(false)</Text> - </View> - </TouchableHighlight> - </View> - ); - }, -}]; - -var styles = StyleSheet.create({ - wrapper: { - borderRadius: 5, - marginBottom: 5, - }, - button: { - backgroundColor: '#eeeeee', - padding: 10, - }, -});
    © 2016 Facebook Inc.

    StatusBarIOS #

    Edit on GitHub

    Use StatusBar for mutating the status bar.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/style.html b/docs/style.html index fecda10e680..f4f2f5339b6 100644 --- a/docs/style.html +++ b/docs/style.html @@ -1,41 +1,32 @@ -Style – React Native | A framework for building native apps using React

    Style #

    Edit on GitHub

    React Native doesn't implement CSS but instead relies on JavaScript to let you style your application. This has been a controversial decision and you can read through those slides for the rationale behind it.

    +Style – React Native | A framework for building native apps using React

    Style #

    Edit on GitHub

    With React Native, you don't use a special language or syntax for defining styles. You just style your application using JavaScript. All of the core components accept a prop named style. The style names and values usually match how CSS works on the web, except names are written like backgroundColor instead of like background-color.

    The style prop can be a plain old JavaScript object. That's the simplest and what we usually use for example code. You can also pass an array of styles - the last style in the array has precedence, so you can use this to inherit styles.

    As a component grows in complexity, it is often cleaner to use StyleSheet.create to define several styles in one place. Here's an example:

    import React, { Component } from 'react'; +import { AppRegistry, StyleSheet, Text, View } from 'react-native'; -

    Declare Styles #

    The way to declare styles in React Native is the following:

    var styles = StyleSheet.create({ - base: { - width: 38, - height: 38, - }, - background: { - backgroundColor: '#222222', - }, - active: { - borderWidth: 2, - borderColor: '#00ff00', - }, -});

    StyleSheet.create construct is optional but provides some key advantages. It ensures that the values are immutable and opaque by transforming them into plain numbers that reference an internal table. By putting it at the end of the file, you also ensure that they are only created once for the application and not on every render.

    All the attribute names and values are a subset of what works on the web. For layout, React Native implements Flexbox.

    Using Styles #

    All the core components accept a style attribute.

    <Text style={styles.base} /> -<View style={styles.background} />

    They also accept an array of styles.

    <View style={[styles.base, styles.background]} />

    The behavior is the same as Object.assign: in case of conflicting values, the one from the right-most element will have precedence and falsy values like false, undefined and null will be ignored. A common pattern is to conditionally add a style based on some condition.

    <View style={[styles.base, this.state.active && styles.active]} />

    Finally, if you really have to, you can also create style objects in render, but they are highly discouraged. Put them last in the array definition.

    <View - style={[styles.base, { - width: this.state.width, - height: this.state.width * this.state.aspectRatio - }]} -/>

    Pass Styles Around #

    In order to let a call site customize the style of your component children, you can pass styles around. Use View.propTypes.style and Text.propTypes.style in order to make sure only styles are being passed.

    var List = React.createClass({ - propTypes: { - style: View.propTypes.style, - elementStyle: View.propTypes.style, - }, - render: function() { +class LotsOfStyles extends Component { + render() { return ( - <View style={this.props.style}> - {elements.map((element) => - <View style={[styles.element, this.props.elementStyle]} /> - )} + <View> + <Text style={styles.red}>just red</Text> + <Text style={styles.bigblue}>just bigblue</Text> + <Text style={[styles.bigblue, styles.red]}>bigblue, then red</Text> + <Text style={[styles.red, styles.bigblue]}>red, then bigblue</Text> </View> ); } +} + +const styles = StyleSheet.create({ + bigblue: { + color: 'blue', + fontWeight: 'bold', + fontSize: 30, + }, + red: { + color: 'red', + }, }); - -// ... in another file ... -<List style={styles.list} elementStyle={styles.listElement} />

    Supported Properties #

    You can checkout latest support of CSS Properties in following Links.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/stylesheet.html b/docs/stylesheet.html index 1ca232bac28..6e470274077 100644 --- a/docs/stylesheet.html +++ b/docs/stylesheet.html @@ -1,4 +1,4 @@ -StyleSheet – React Native | A framework for building native apps using React

    StyleSheet #

    Edit on GitHub

    A StyleSheet is an abstraction similar to CSS StyleSheets

    Create a new StyleSheet:

    var styles = StyleSheet.create({ +StyleSheet – React Native | A framework for building native apps using React

    StyleSheet #

    Edit on GitHub

    A StyleSheet is an abstraction similar to CSS StyleSheets

    Create a new StyleSheet:

    var styles = StyleSheet.create({ container: { borderRadius: 4, borderWidth: 0.5, @@ -17,7 +17,7 @@ easier to understand.
  • Naming the styles is a good way to add meaning to the low level components in the render function.
  • Performance:

    • Making a stylesheet from a style object makes it possible to refer to it by ID instead of creating a new style object every time.
    • It also allows to send the style only once through the bridge. All -subsequent uses are going to refer an id (not implemented yet).

    Methods #

    static create(obj) #

    Creates a StyleSheet style reference from the given object.

    Properties #

    hairlineWidth: CallExpression #

    This is defined as the width of a thin line on the platform. It can be +subsequent uses are going to refer an id (not implemented yet).

    Methods #

    static create(obj) #

    Creates a StyleSheet style reference from the given object.

    Properties #

    hairlineWidth: CallExpression #

    This is defined as the width of a thin line on the platform. It can be used as the thickness of a border or division between two elements. Example:

    { borderBottomColor: '#bbb', @@ -26,7 +26,16 @@ Example:

    flatten: CallExpression #

    Flattens an array of style objects, into one aggregated style object. +value may be calculated differently.

    absoluteFill: CallExpression #

    A very common pattern is to create overlays with position absolute and zero positioning, +so absoluteFill can be used for convenience and to reduce duplication of these repeated +styles.

    absoluteFillObject: ObjectExpression #

    Sometimes you may want absoluteFill but with a couple tweaks - absoluteFillObject can be +used to create a customized entry in a StyleSheet, e.g.:

    const styles = StyleSheet.create({ + wrapper: { + ...StyleSheet.absoluteFillObject, + top: 10, + backgroundColor: 'transparent', + }, + });

    flatten: CallExpression #

    Flattens an array of style objects, into one aggregated style object. Alternatively, this method can be used to lookup IDs, returned by StyleSheet.register.

    NOTE: Exercise caution as abusing this can tax you in terms of optimizations.

    IDs enable optimizations through the bridge and memory in general. Refering @@ -48,7 +57,7 @@ StyleSheet.f to resolve style objects represented by IDs. Thus, an array of style objects (instances of StyleSheet.create), are individually resolved to, their respective objects, merged as one and then returned. This also explains -the alternative use.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/switch.html b/docs/switch.html index 0b88ea8ee69..f8f50b8a113 100644 --- a/docs/switch.html +++ b/docs/switch.html @@ -1,10 +1,10 @@ -Switch – React Native | A framework for building native apps using React

    Switch #

    Edit on GitHub

    Renders a boolean input.

    This is a controlled component that requires an onValueChange callback that +Switch – React Native | A framework for building native apps using React

    Switch #

    Edit on GitHub

    Renders a boolean input.

    This is a controlled component that requires an onValueChange callback that updates the value prop in order for the component to reflect user actions. If the value prop is not updated, the component will continue to render the supplied value prop instead of the expected result of any user actions.

    @keyword checkbox @keyword toggle

    Props #

    disabled bool #

    If true the user won't be able to toggle the switch. Default value is false.

    onValueChange function #

    Invoked with the new value when the value changes.

    testID string #

    Used to locate this view in end-to-end tests.

    value bool #

    The value of the switch. If true the switch will be turned on. -Default value is false.

    iosonTintColor color #

    Background color when the switch is turned on.

    iosthumbTintColor color #

    Color of the foreground switch grip.

    iostintColor color #

    Background color when the switch is turned off.

    Examples #

    Edit on GitHub
    'use strict'; +Default value is false.

    iosonTintColor color #

    Background color when the switch is turned on.

    iosthumbTintColor color #

    Color of the foreground switch grip.

    iostintColor color #

    Background color when the switch is turned off.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -147,7 +147,7 @@ Default value is false.

    < exports.title = '<Switch>'; exports.displayName = 'SwitchExample'; exports.description = 'Native boolean input'; -exports.examples = examples;

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/tabbarios-item.html b/docs/tabbarios-item.html index d77f6e701df..905a39c3baa 100644 --- a/docs/tabbarios-item.html +++ b/docs/tabbarios-item.html @@ -1,11 +1,11 @@ -TabBarIOS.Item – React Native | A framework for building native apps using React

    TabBarIOS.Item #

    Edit on GitHub

    Props #

    badge string, number #

    Little red bubble that sits at the top right of the icon.

    icon Image.propTypes.source #

    A custom icon for the tab. It is ignored when a system icon is defined.

    onPress function #

    Callback when this tab is being selected, you should change the state of your +TabBarIOS.Item – React Native | A framework for building native apps using React

    TabBarIOS.Item #

    Edit on GitHub

    Props #

    badge string, number #

    Little red bubble that sits at the top right of the icon.

    icon Image.propTypes.source #

    A custom icon for the tab. It is ignored when a system icon is defined.

    onPress function #

    Callback when this tab is being selected, you should change the state of your component to set selected={true}.

    renderAsOriginal bool #

    If set to true it renders the image as original, it defaults to being displayed as a template

    selected bool #

    It specifies whether the children are visible or not. If you see a blank content, you probably forgot to add a selected one.

    selectedIcon Image.propTypes.source #

    A custom icon when the tab is selected. It is ignored when a system icon is defined. If left empty, the icon will be tinted in blue.

    style View#style #

    React style object.

    systemIcon enum('bookmarks', 'contacts', 'downloads', 'favorites', 'featured', 'history', 'more', 'most-recent', 'most-viewed', 'recents', 'search', 'top-rated') #

    Items comes with a few predefined system icons. Note that if you are using them, the title and selectedIcon will be overridden with the system ones.

    title string #

    Text that appears under the icon. It is ignored when a system icon -is defined.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/tabbarios.html b/docs/tabbarios.html index 3c4fcef6936..cd411ee1714 100644 --- a/docs/tabbarios.html +++ b/docs/tabbarios.html @@ -1,10 +1,10 @@ -TabBarIOS – React Native | A framework for building native apps using React

    TabBarIOS #

    Edit on GitHub

    Props #

    barTintColor color #

    Background color of the tab bar

    itemPositioning enum('fill', 'center', 'auto') #

    Specifies tab bar item positioning. Available values are: +TabBarIOS – React Native | A framework for building native apps using React

    TabBarIOS #

    Edit on GitHub

    Props #

    barTintColor color #

    Background color of the tab bar

    itemPositioning enum('fill', 'center', 'auto') #

    Specifies tab bar item positioning. Available values are: - fill - distributes items across the entire width of the tab bar - center - centers item in the available tab bar space - auto (default) - distributes items dynamically according to the user interface idiom. In a horizontally compact environment (e.g. iPhone 5) this value defaults to fill, in a horizontally regular one (e.g. iPad) -it defaults to center.

    tintColor color #

    Color of the currently selected tab icon

    translucent bool #

    A Boolean value that indicates whether the tab bar is translucent

    unselectedTintColor color #

    Color of text on unselected tabs

    Examples #

    Edit on GitHub
    'use strict'; +it defaults to center.

    tintColor color #

    Color of the currently selected tab icon

    translucent bool #

    A Boolean value that indicates whether the tab bar is translucent

    unselectedTintColor color #

    Color of text on unselected tabs

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -102,7 +102,7 @@ it defaults to center.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/testing.html b/docs/testing.html index a79407fbb66..0ffaca76799 100644 --- a/docs/testing.html +++ b/docs/testing.html @@ -1,4 +1,4 @@ -Testing – React Native | A framework for building native apps using React

    Testing #

    Edit on GitHub

    Running Tests and Contributing #

    The React Native repo has several tests you can run to verify you haven't caused a regression with your PR. These tests are run with the Travis and CircleCI continuous integration systems, and will automatically post the results to your PR.

    We don't have perfect test coverage of course, especially for complex end-to-end interactions with the user, so many changes will still require significant manual verification, but we would love it if you want to help us increase our test coverage and add more tests and test cases!

    Jest Tests #

    Jest tests are JS-only tests run on the command line with node. The tests themselves live in the __tests__ directories of the files they test, and there is a large emphasis on aggressively mocking out functionality that is not under test for failure isolation and maximum speed. You can run the existing React Native jest tests with

    npm test

    from the react-native root, and we encourage you to add your own tests for any components you want to contribute to. See getImageSource-test.js for a basic example.

    Note: In order to run your own tests, you will have to first follow the Getting Started instructions on the Jest page and then include the jest objects below in package.json so that the scripts are pre-processed before execution.

    ... +Testing – React Native | A framework for building native apps using React

    Testing #

    Edit on GitHub

    Running Tests and Contributing #

    The React Native repo has several tests you can run to verify you haven't caused a regression with your PR. These tests are run with the Travis and CircleCI continuous integration systems, and will automatically post the results to your PR.

    We don't have perfect test coverage of course, especially for complex end-to-end interactions with the user, so many changes will still require significant manual verification, but we would love it if you want to help us increase our test coverage and add more tests and test cases!

    Jest Tests #

    Jest tests are JS-only tests run on the command line with node. The tests themselves live in the __tests__ directories of the files they test, and there is a large emphasis on aggressively mocking out functionality that is not under test for failure isolation and maximum speed. You can run the existing React Native jest tests with

    npm test

    from the react-native root, and we encourage you to add your own tests for any components you want to contribute to. See getImageSource-test.js for a basic example.

    Note: In order to run your own tests, you will have to first follow the Getting Started instructions on the Jest page and then include the jest objects below in package.json so that the scripts are pre-processed before execution.

    ... "scripts": { ... "test": "jest" @@ -22,7 +22,7 @@ ...

    Note: you may have to install/upgrade/link Node.js and other parts of your environment in order for the tests to run correctly. Check out the latest setup in .travis.yml

    Unit tests (Android) #

    React Native uses the Buck build tool to run tests. Unit tests run locally on your machine, no emulator is needed. To run the tests:

    $ cd react-native $ ./scripts/run-android-local-unit-tests.sh

    Integration tests (Android) #

    React Native uses the Buck build tool to run tests. Integration tests run on an emulator / device and verify that modules and components, as well as the core parts of React Native (such as the bridge) work well end-to-end.

    Make sure you have the path to the Android NDK set up, see Prerequisites.

    To run the tests:

    $ cd react-native $ npm install -$ ./scripts/run-android-local-integration-tests.sh

    Integration Tests (iOS) #

    React Native provides facilities to make it easier to test integrated components that require both native and JS components to communicate across the bridge. The two main components are RCTTestRunner and RCTTestModule. RCTTestRunner sets up the ReactNative environment and provides facilities to run the tests as XCTestCases in Xcode (runTest:module is the simplest method). RCTTestModule is exported to JS as NativeModules.TestModule. The tests themselves are written in JS, and must call TestModule.markTestCompleted() when they are done, otherwise the test will timeout and fail. Test failures are primarily indicated by throwing a JS exception. It is also possible to test error conditions with runTest:module:initialProps:expectErrorRegex: or runTest:module:initialProps:expectErrorBlock: which will expect an error to be thrown and verify the error matches the provided criteria. See IntegrationTestHarnessTest.js, UIExplorerIntegrationTests.m, and IntegrationTestsApp.js for example usage and integration points.

    You can run integration tests locally with cmd+U in the IntegrationTest and UIExplorer apps in Xcode.

    Snapshot Tests (iOS) #

    A common type of integration test is the snapshot test. These tests render a component, and verify snapshots of the screen against reference images using TestModule.verifySnapshot(), using the FBSnapshotTestCase library behind the scenes. Reference images are recorded by setting recordMode = YES on the RCTTestRunner, then running the tests. Snapshots will differ slightly between 32 and 64 bit, and various OS versions, so it's recommended that you enforce tests are run with the correct configuration. It's also highly recommended that all network data be mocked out, along with other potentially troublesome dependencies. See SimpleSnapshotTest for a basic example.

    If you make a change that affects a snapshot test in a PR, such as adding a new example case to one of the examples that is snapshotted, you'll need to re-record the snapshot reference image. To do this, simply change to _runner.recordMode = YES; in UIExplorer/UIExplorerSnapshotTests.m, re-run the failing tests, then flip record back to NO and submit/update your PR and wait to see if the Travis build passes.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/text.html b/docs/text.html index 27736daba3b..f652bfa9bbb 100644 --- a/docs/text.html +++ b/docs/text.html @@ -1,21 +1,32 @@ -Text – React Native | A framework for building native apps using React

    Text #

    Edit on GitHub

    A React component for displaying text which supports nesting, -styling, and touch handling. In the following example, the nested title and -body text will inherit the fontFamily from styles.baseText, but the title -provides its own additional styles. The title and body will stack on top of -each other on account of the literal newlines:

    renderText: function() { - return ( - <Text style={styles.baseText}> - <Text style={styles.titleText} onPress={this.onPressTitle}> - {this.state.titleText + '\n\n'} +Text – React Native | A framework for building native apps using React

    Text #

    Edit on GitHub

    A React component for displaying text.

    Text supports nesting, styling, and touch handling.

    In the following example, the nested title and body text will inherit the fontFamily from +styles.baseText, but the title provides its own additional styles. The title and body will +stack on top of each other on account of the literal newlines:

    import React, { Component } from 'react'; +import { AppRegistry, Text, StyleSheet } from 'react-native'; + +class TextInANest extends Component { + constructor(props) { + super(props); + this.state = { + titleText: "Bird's Nest", + bodyText: 'This is not really a bird nest.' + }; + } + + render() { + return ( + <Text style={styles.baseText}> + <Text style={styles.titleText} onPress={this.onPressTitle}> + {this.state.titleText}<br /><br /> + </Text> + <Text numberOfLines={5}> + {this.state.bodyText} + </Text> </Text> - <Text numberOfLines={5}> - {this.state.bodyText} - </Text> - </Text> - ); -}, -... -var styles = StyleSheet.create({ + ); + } +} + +const styles = StyleSheet.create({ baseText: { fontFamily: 'Cochin', }, @@ -23,24 +34,56 @@ each other on account of the literal newlines:

    : 20, fontWeight: 'bold', }, -};

    Props #

    accessible #

    numberOfLines number #

    Used to truncate the text with an ellipsis after computing the text +}); + +// App registration and rendering +AppRegistry.registerComponent('TextInANest', () => TextInANest);

    Props #

    accessible bool #

    When set to true, indicates that the view is an accessibility element. The default value +for a Text element is true.

    See the +Accessibility guide +for more information.

    lineBreakMode enum('head', 'middle', 'tail', 'clip') #

    Line Break mode. This can be one of the following values:

    • head - The line is displayed so that the end fits in the container and the missing text +at the beginning of the line is indicated by an ellipsis glyph. e.g., "...wxyz"
    • middle - The line is displayed so that the beginning and end fit in the container and the +missing text in the middle is indicated by an ellipsis glyph. "ab...yz"
    • tail - The line is displayed so that the beginning fits in the container and the +missing text at the end of the line is indicated by an ellipsis glyph. e.g., "abcd..."
    • clip - Lines are not drawn past the edge of the text container.

    The default is tail.

    numberOfLines must be set in conjunction with this prop.

    clip is working only for iOS

    numberOfLines number #

    Used to truncate the text with an ellipsis after computing the text layout, including line wrapping, such that the total number of lines -does not exceed this number.

    onLayout function #

    Invoked on mount and layout changes with

    {nativeEvent: {layout: {x, y, width, height}}}

    onLongPress function #

    This function is called on long press.

    onPress function #

    This function is called on press.

    style style #

    color color
    fontFamily string
    fontSize number
    fontStyle enum('normal', 'italic')
    fontWeight enum('normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900')

    Specifies font weight. The values 'normal' and 'bold' are supported for +does not exceed this number.

    This prop is commonly used with lineBreakMode.

    onLayout function #

    Invoked on mount and layout changes with

    {nativeEvent: {layout: {x, y, width, height}}}

    onLongPress function #

    This function is called on long press.

    e.g., `onLongPress={this.increaseSize}>``

    onPress function #

    This function is called on press.

    e.g., `onPress={() => console.log('1st')}``

    style style #

    color color
    fontFamily string
    fontSize number
    fontStyle enum('normal', 'italic')
    fontWeight enum('normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900')

    Specifies font weight. The values 'normal' and 'bold' are supported for most fonts. Not all fonts have a variant for each of the numeric values, in that case the closest one is chosen.

    lineHeight number
    textAlign enum('auto', 'left', 'right', 'center', 'justify')

    Specifies text alignment. The value 'justify' is only supported on iOS and -fallbacks to left on Android.

    textDecorationLine enum('none', 'underline', 'line-through', 'underline line-through')
    textShadowColor color
    textShadowOffset {width: number, height: number}
    textShadowRadius number
    androidtextAlignVertical enum('auto', 'top', 'bottom', 'center')
    iosletterSpacing number
    iostextDecorationColor color
    iostextDecorationStyle enum('solid', 'double', 'dotted', 'dashed')
    ioswritingDirection enum('auto', 'ltr', 'rtl')

    testID string #

    Used to locate this view in end-to-end tests.

    iosallowFontScaling bool #

    Specifies should fonts scale to respect Text Size accessibility setting on iOS.

    iossuppressHighlighting bool #

    When true, no visual change is made when text is pressed down. By -default, a gray oval highlights the text on press down.

    Description #

    Edit on GitHub

    Nested Text #

    Both iOS and Android allow you to display formatted text by annotating ranges of a string with specific formatting like bold or colored text (NSAttributedString on iOS, SpannableString on Android). In practice, this is very tedious. For React Native, we decided to use web paradigm for this where you can nest text to achieve the same effect.

    <Text style={{fontWeight: 'bold'}}> - I am bold - <Text style={{color: 'red'}}> - and red - </Text> -</Text>

    Behind the scenes, React Native converts this to a flat NSAttributedString or SpannableString that contains the following information:

    "I am bold and red" +fallbacks to left on Android.

    textDecorationLine enum('none', 'underline', 'line-through', 'underline line-through')
    textShadowColor color
    textShadowOffset {width: number, height: number}
    textShadowRadius number
    androidtextAlignVertical enum('auto', 'top', 'bottom', 'center')
    iosletterSpacing number
    iostextDecorationColor color
    iostextDecorationStyle enum('solid', 'double', 'dotted', 'dashed')
    ioswritingDirection enum('auto', 'ltr', 'rtl')

    testID string #

    Used to locate this view in end-to-end tests.

    androidselectable bool #

    Lets the user select text, to use the native copy and paste functionality.

    iosallowFontScaling bool #

    Specifies whether fonts should scale to respect Text Size accessibility setting on iOS. The +default is true.

    iossuppressHighlighting bool #

    When true, no visual change is made when text is pressed down. By +default, a gray oval highlights the text on press down.

    Description #

    Edit on GitHub

    Nested Text #

    Both iOS and Android allow you to display formatted text by annotating ranges of a string with specific formatting like bold or colored text (NSAttributedString on iOS, SpannableString on Android). In practice, this is very tedious. For React Native, we decided to use web paradigm for this where you can nest text to achieve the same effect.

    import React, { Component } from 'react'; +import { AppRegistry, Text } from 'react-native'; + +class BoldAndBeautiful extends Component { + render() { + return ( + <Text style={{fontWeight: 'bold'}}> + I am bold + <Text style={{color: 'red'}}> + and red + </Text> + </Text> + ); + } +} + +AppRegistry.registerComponent('BoldAndBeautiful', () => BoldAndBeautiful);

    Behind the scenes, React Native converts this to a flat NSAttributedString or SpannableString that contains the following information:

    "I am bold and red" 0-9: bold -9-17: bold, red

    Nested Views (iOS Only) #

    On iOS, you can nest views within your Text component. Here's an example:

    <Text> - There is a blue square - <View style={{width: 50, height: 50, backgroundColor: 'steelblue'}} /> - in between my text. -</Text>

    In order to use this feature, you must give the view a width and a height.

    Containers #

    The <Text> element is special relative to layout: everything inside is no longer using the flexbox layout but using text layout. This means that elements inside of a <Text> are no longer rectangles, but wrap when they see the end of the line.

    <Text> +9-17: bold, red

    Nested Views (iOS Only) #

    On iOS, you can nest views within your Text component. Here's an example:

    import React, { Component } from 'react'; +import { AppRegistry, Text, View } from 'react-native'; + +class BlueIsCool extends Component { + render() { + return ( + <Text> + There is a blue square + <View style={{width: 50, height: 50, backgroundColor: 'steelblue'}} /> + in between my text. + </Text> + ); + } +} + +AppRegistry.registerComponent('BlueIsCool', () => BlueIsCool);

    In order to use this feature, you must give the view a width and a height.

    Containers #

    The <Text> element is special relative to layout: everything inside is no longer using the flexbox layout but using text layout. This means that elements inside of a <Text> are no longer rectangles, but wrap when they see the end of the line.

    <Text> <Text>First part and </Text> <Text>second part</Text> </Text> @@ -79,7 +122,7 @@ html { <Text style={{color: 'red'}}> and red </Text> -</Text>

    We believe that this more constrained way to style text will yield better apps:

    • (Developer) React components are designed with strong isolation in mind: You should be able to drop a component anywhere in your application, trusting that as long as the props are the same, it will look and behave the same way. Text properties that could inherit from outside of the props would break this isolation.

    • (Implementor) The implementation of React Native is also simplified. We do not need to have a fontFamily field on every single element, and we do not need to potentially traverse the tree up to the root every time we display a text node. The style inheritance is only encoded inside of the native Text component and doesn't leak to other components or the system itself.

    Examples #

    IOS #

    Edit on GitHub
    'use strict'; +</Text>

    We believe that this more constrained way to style text will yield better apps:

    • (Developer) React components are designed with strong isolation in mind: You should be able to drop a component anywhere in your application, trusting that as long as the props are the same, it will look and behave the same way. Text properties that could inherit from outside of the props would break this isolation.

    • (Implementor) The implementation of React Native is also simplified. We do not need to have a fontFamily field on every single element, and we do not need to potentially traverse the tree up to the root every time we display a text node. The style inheritance is only encoded inside of the native Text component and doesn't leak to other components or the system itself.

    Examples #

    IOS #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -503,6 +546,26 @@ exports.examples /View> ); }, +}, { + title: 'Line break mode', + render: function() { + return ( + <View> + <Text numberOfLines={1}> + This very long text should be truncated with dots in the end. + </Text> + <Text lineBreakMode="middle" numberOfLines={1}> + This very long text should be truncated with dots in the middle. + </Text> + <Text lineBreakMode="head" numberOfLines={1}> + This very long text should be truncated with dots in the beginning. + </Text> + <Text lineBreakMode="clip" numberOfLines={1}> + This very looooooooooooooooooooooooooooong text should be clipped. + </Text> + </View> + ); + }, }]; var styles = StyleSheet.create({ @@ -511,7 +574,7 @@ exports.examples : 0, backgroundColor: 'rgba(100, 100, 100, 0.3)' }, -});

    ANDROID #

    Edit on GitHub
    'use strict'; +});

    ANDROID #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -886,6 +949,17 @@ exports.examples /Text> </UIExplorerBlock> + <UIExplorerBlock title="Line break mode"> + <Text numberOfLines={1}> + This very long text should be truncated with dots in the end. + </Text> + <Text lineBreakMode="middle" numberOfLines={1}> + This very long text should be truncated with dots in the middle. + </Text> + <Text lineBreakMode="head" numberOfLines={1}> + This very long text should be truncated with dots in the beginning. + </Text> + </UIExplorerBlock> </UIExplorerPage> ); } @@ -898,7 +972,7 @@ exports.examples }, }); -module.exports = TextExample;
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/textinput.html b/docs/textinput.html index 9a1273b33b0..9772e9d9d25 100644 --- a/docs/textinput.html +++ b/docs/textinput.html @@ -1,44 +1,112 @@ -TextInput – React Native | A framework for building native apps using React

    TextInput #

    Edit on GitHub

    A foundational component for inputting text into the app via a +TextInput – React Native | A framework for building native apps using React

    TextInput #

    Edit on GitHub

    A foundational component for inputting text into the app via a keyboard. Props provide configurability for several features, such as auto-correction, auto-capitalization, placeholder text, and different keyboard types, such as a numeric keypad.

    The simplest use case is to plop down a TextInput and subscribe to the onChangeText events to read the user input. There are also other events, such as onSubmitEditing and onFocus that can be subscribed to. A simple -example:

    <TextInput - style={{height: 40, borderColor: 'gray', borderWidth: 1}} - onChangeText={(text) => this.setState({text})} - value={this.state.text} - />

    Note that some props are only available with multiline={true/false}. +example:

    import React, { Component } from 'react'; +import { AppRegistry, TextInput } from 'react-native'; + +class UselessTextInput extends Component { + constructor(props) { + super(props); + this.state = { text: 'Useless Placeholder' }; + } + + render() { + return ( + <TextInput + style={{height: 40, borderColor: 'gray', borderWidth: 1}} + onChangeText={(text) => this.setState({text})} + value={this.state.text} + /> + ); + } +} + +// App registration and rendering +AppRegistry.registerComponent('AwesomeProject', () => UselessTextInput);

    Note that some props are only available with multiline={true/false}. Additionally, border styles that apply to only one side of the element (e.g., borderBottomColor, borderLeftWidth, etc.) will not be applied if multiline=false. To achieve the same effect, you can wrap your TextInput -in a View:

    <View style={{ borderBottomColor: '#000000', borderBottomWidth: 1, }}> - <TextInput {...props} /> - </View>

    Props #

    autoCapitalize enum('none', 'sentences', 'words', 'characters') #

    Can tell TextInput to automatically capitalize certain characters.

    • characters: all characters,
    • words: first letter of each word
    • sentences: first letter of each sentence (default)
    • none: don't auto capitalize anything

    autoCorrect bool #

    If false, disables auto-correct. The default value is true.

    autoFocus bool #

    If true, focuses the input on componentDidMount. -The default value is false.

    blurOnSubmit bool #

    If true, the text field will blur when submitted. +in a View:

    import React, { Component } from 'react'; +import { AppRegistry, View, TextInput } from 'react-native'; + +class UselessTextInput extends Component { + render() { + return ( + <TextInput + {...this.props} // Inherit any props passed to it; e.g., multiline, numberOfLines below + editable = {true} + maxLength = {40} + /> + ); + } +} + +class UselessTextInputMultiline extends Component { + constructor(props) { + super(props); + this.state = { + text: 'Useless Multiline Placeholder', + }; + } + + // If you type something in the text box that is a color, the background will change to that + // color. + render() { + return ( + <View style={{ + backgroundColor: this.state.text, + borderBottomColor: '#000000', + borderBottomWidth: 1 }} + > + <UselessTextInput + multiline = {true} + numberOfLines = {4} + onChangeText={(text) => this.setState({text})} + value={this.state.text} + /> + </View> + ); + } +} + +// App registration and rendering +AppRegistry.registerComponent( + 'AwesomeProject', + () => UselessTextInputMultiline +);

    TextInput has by default a border at the bottom of its view. This border +has its padding set by the background image provided by the system, and it +cannot be changed. Solutions to avoid this is to either not set height +explicitly, case in which the system will take care of displaying the border +in the correct position, or to not display the border by setting +underlineColorAndroid to transparent.

    Props #

    autoCapitalize enum('none', 'sentences', 'words', 'characters') #

    Can tell TextInput to automatically capitalize certain characters.

    • characters: all characters.
    • words: first letter of each word.
    • sentences: first letter of each sentence (default).
    • none: don't auto capitalize anything.

    autoCorrect bool #

    If false, disables auto-correct. The default value is true.

    autoFocus bool #

    If true, focuses the input on componentDidMount. +The default value is false.

    blurOnSubmit bool #

    If true, the text field will blur when submitted. The default value is true for single-line fields and false for -multiline fields. Note that for multiline fields, setting blurOnSubmit -to true means that pressing return will blur the field and trigger the -onSubmitEditing event instead of inserting a newline into the field.

    defaultValue string #

    Provides an initial value that will change when the user starts typing. -Useful for simple use-cases where you don't want to deal with listening -to events and updating the value prop to keep the controlled state in sync.

    editable bool #

    If false, text is not editable. The default value is true.

    keyboardType enum('default', 'email-address', 'numeric', 'phone-pad', 'ascii-capable', 'numbers-and-punctuation', 'url', 'number-pad', 'name-phone-pad', 'decimal-pad', 'twitter', 'web-search') #

    Determines which keyboard to open, e.g.numeric.

    The following values work across platforms:

    • default
    • numeric
    • email-address

    maxLength number #

    Limits the maximum number of characters that can be entered. Use this -instead of implementing the logic in JS to avoid flicker.

    multiline bool #

    If true, the text input can be multiple lines. -The default value is false.

    onBlur function #

    Callback that is called when the text input is blurred

    onChange function #

    Callback that is called when the text input's text changes.

    onChangeText function #

    Callback that is called when the text input's text changes. -Changed text is passed as an argument to the callback handler.

    onEndEditing function #

    Callback that is called when text input ends.

    onFocus function #

    Callback that is called when the text input is focused

    onLayout function #

    Invoked on mount and layout changes with {x, y, width, height}.

    onSelectionChange function #

    Callback that is called when the text input selection is changed

    onSubmitEditing function #

    Callback that is called when the text input's submit button is pressed. -Invalid if multiline={true} is specified.

    placeholder string #

    The string that will be rendered before text input has been entered

    placeholderTextColor string #

    The text color of the placeholder string

    returnKeyType enum('done', 'go', 'next', 'search', 'send', 'none', 'previous', 'default', 'emergency-call', 'google', 'join', 'route', 'yahoo') #

    Determines how the return key should look. On Android you can also use -returnKeyLabel.

    The following values work across platforms:

    • done
    • go
    • next
    • search
    • send

    The following values work on Android only:

    • none
    • previous

    The following values work on iOS only:

    • default
    • emergency-call
    • google
    • join
    • route
    • yahoo

    secureTextEntry bool #

    If true, the text input obscures the text entered so that sensitive text -like passwords stay secure. The default value is false.

    selectTextOnFocus bool #

    If true, all text will automatically be selected on focus

    selectionColor string #

    The highlight (and cursor on ios) color of the text input

    style Text#style #

    Styles

    value string #

    The value to show for the text input. TextInput is a controlled +multiline fields. Note that for multiline fields, setting blurOnSubmit +to true means that pressing return will blur the field and trigger the +onSubmitEditing event instead of inserting a newline into the field.

    defaultValue string #

    Provides an initial value that will change when the user starts typing. +Useful for simple use-cases where you do not want to deal with listening +to events and updating the value prop to keep the controlled state in sync.

    editable bool #

    If false, text is not editable. The default value is true.

    keyboardType enum('default', 'email-address', 'numeric', 'phone-pad', 'ascii-capable', 'numbers-and-punctuation', 'url', 'number-pad', 'name-phone-pad', 'decimal-pad', 'twitter', 'web-search') #

    Determines which keyboard to open, e.g.numeric.

    The following values work across platforms:

    • default
    • numeric
    • email-address

    maxLength number #

    Limits the maximum number of characters that can be entered. Use this +instead of implementing the logic in JS to avoid flicker.

    multiline bool #

    If true, the text input can be multiple lines. +The default value is false.

    onBlur function #

    Callback that is called when the text input is blurred.

    onChange function #

    Callback that is called when the text input's text changes.

    onChangeText function #

    Callback that is called when the text input's text changes. +Changed text is passed as an argument to the callback handler.

    onEndEditing function #

    Callback that is called when text input ends.

    onFocus function #

    Callback that is called when the text input is focused.

    onLayout function #

    Invoked on mount and layout changes with {x, y, width, height}.

    onSelectionChange function #

    Callback that is called when the text input selection is changed.

    onSubmitEditing function #

    Callback that is called when the text input's submit button is pressed. +Invalid if multiline={true} is specified.

    placeholder string #

    The string that will be rendered before text input has been entered.

    placeholderTextColor string #

    The text color of the placeholder string.

    returnKeyType enum('done', 'go', 'next', 'search', 'send', 'none', 'previous', 'default', 'emergency-call', 'google', 'join', 'route', 'yahoo') #

    Determines how the return key should look. On Android you can also use +returnKeyLabel.

    Cross platform

    The following values work across platforms:

    • done
    • go
    • next
    • search
    • send

    Android Only

    The following values work on Android only:

    • none
    • previous

    iOS Only

    The following values work on iOS only:

    • default
    • emergency-call
    • google
    • join
    • route
    • yahoo

    secureTextEntry bool #

    If true, the text input obscures the text entered so that sensitive text +like passwords stay secure. The default value is false.

    selectTextOnFocus bool #

    If true, all text will automatically be selected on focus.

    selectionColor string #

    The highlight (and cursor on iOS) color of the text input.

    value string #

    The value to show for the text input. TextInput is a controlled component, which means the native value will be forced to match this -value prop if provided. For most uses this works great, but in some +value prop if provided. For most uses, this works great, but in some cases this may cause flickering - one common cause is preventing edits by keeping value the same. In addition to simply setting the same value, either set editable={false}, or set/update maxLength to prevent -unwanted edits without flicker.

    androidnumberOfLines number #

    Sets the number of lines for a TextInput. Use it with multiline set to -true to be able to fill the lines.

    androidreturnKeyLabel string #

    Sets the return key to the label. Use it instead of returnKeyType.

    androidunderlineColorAndroid string #

    The color of the textInput underline.

    iosclearButtonMode enum('never', 'while-editing', 'unless-editing', 'always') #

    When the clear button should appear on the right side of the text view

    iosclearTextOnFocus bool #

    If true, clears the text field automatically when editing begins

    iosenablesReturnKeyAutomatically bool #

    If true, the keyboard disables the return key when there is no text and -automatically enables it when there is text. The default value is false.

    ioskeyboardAppearance enum('default', 'light', 'dark') #

    Determines the color of the keyboard.

    iosonKeyPress function #

    Callback that is called when a key is pressed. +unwanted edits without flicker.

    androidnumberOfLines number #

    Sets the number of lines for a TextInput. Use it with multiline set to +true to be able to fill the lines.

    androidreturnKeyLabel string #

    Sets the return key to the label. Use it instead of returnKeyType.

    androidunderlineColorAndroid string #

    The color of the TextInput underline.

    iosclearButtonMode enum('never', 'while-editing', 'unless-editing', 'always') #

    When the clear button should appear on the right side of the text view.

    iosclearTextOnFocus bool #

    If true, clears the text field automatically when editing begins.

    iosenablesReturnKeyAutomatically bool #

    If true, the keyboard disables the return key when there is no text and +automatically enables it when there is text. The default value is false.

    ioskeyboardAppearance enum('default', 'light', 'dark') #

    Determines the color of the keyboard.

    iosonKeyPress function #

    Callback that is called when a key is pressed. Pressed key value is passed as an argument to the callback handler. -Fires before onChange callbacks.

    iosselectionState DocumentSelectionState #

    See DocumentSelectionState.js, some state that is responsible for -maintaining selection information for a document

    Methods #

    isFocused(): boolean #

    Returns if the input is currently focused.

    clear() #

    Removes all text from the input.

    Examples #

    IOS #

    Edit on GitHub
    'use strict'; +Fires before onChange callbacks.

    iosselectionState DocumentSelectionState #

    An instance of DocumentSelectionState, this is some state that is responsible for +maintaining selection information for a document.

    Some functionality that can be performed with this instance is:

    • blur()
    • focus()
    • update()

    You can reference DocumentSelectionState in +vendor/document/selection/DocumentSelectionState.js

    Methods #

    isFocused(0): #

    Returns true if the input is currently focused; false otherwise.

    clear(0) #

    Removes all text from the TextInput.

    Examples #

    IOS #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -732,7 +800,7 @@ exports.examples return <TokenizedTextExample />; } }, -];

    ANDROID #

    Edit on GitHub
    'use strict'; +];

    ANDROID #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -1289,7 +1357,7 @@ exports.examples return <View>{examples}{types}</View>; } }, -];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/timepickerandroid.html b/docs/timepickerandroid.html index ccb9878add4..f2b842611cb 100644 --- a/docs/timepickerandroid.html +++ b/docs/timepickerandroid.html @@ -1,4 +1,4 @@ -TimePickerAndroid – React Native | A framework for building native apps using React

    TimePickerAndroid #

    Edit on GitHub

    Opens the standard Android time picker dialog.

    Example #

    try { +TimePickerAndroid – React Native | A framework for building native apps using React

    TimePickerAndroid #

    Edit on GitHub

    Opens the standard Android time picker dialog.

    Example #

    try { const {action, hour, minute} = await TimePickerAndroid.open({ hour: 14, minute: 0, @@ -9,7 +9,7 @@ } } catch ({code, message}) { console.warn('Cannot open time picker', message); -}

    Methods #

    static open(options) #

    Opens the standard Android time picker dialog.

    The available keys for the options object are: +}

    Methods #

    static open(options) #

    Opens the standard Android time picker dialog.

    The available keys for the options object are: hour (0-23) - the hour to show, defaults to the current time minute (0-59) - the minute to show, defaults to the current time * is24Hour (boolean) - If true, the picker uses the 24-hour format. If false, @@ -17,7 +17,7 @@ is used.

    Returns a Promise which will be invoked an object containing action, hour (0-23), minute (0-59) if the user picked a time. If the user dismissed the dialog, the Promise will still be resolved with action being TimePickerAndroid.dismissedAction and all the other keys -being undefined. Always check whether the action before reading the values.

    static timeSetAction() #

    A time has been selected.

    static dismissedAction() #

    The dialog has been dismissed.

    Examples #

    Edit on GitHub
    'use strict'; +being undefined. Always check whether the action before reading the values.

    static timeSetAction(0) #

    A time has been selected.

    static dismissedAction(0) #

    The dialog has been dismissed.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -115,7 +115,7 @@ being undefined. Always check whether the action b }, }); -module.exports = TimePickerAndroidExample;
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/timers.html b/docs/timers.html index f72d94e1e9a..44a9875773d 100644 --- a/docs/timers.html +++ b/docs/timers.html @@ -1,4 +1,4 @@ -Timers – React Native | A framework for building native apps using React

    Timers #

    Edit on GitHub

    Timers are an important part of an application and React Native implements the browser timers.

    Timers #

    • setTimeout, clearTimeout
    • setInterval, clearInterval
    • setImmediate, clearImmediate
    • requestAnimationFrame, cancelAnimationFrame

    requestAnimationFrame(fn) is not the same as setTimeout(fn, 0) - the former will fire after all the frame has flushed, whereas the latter will fire as quickly as possible (over 1000x per second on a iPhone 5S).

    setImmediate is executed at the end of the current JavaScript execution block, right before sending the batched response back to native. Note that if you call setImmediate within a setImmediate callback, it will be executed right away, it won't yield back to native in between.

    The Promise implementation uses setImmediate as its asynchronicity primitive.

    InteractionManager #

    One reason why well-built native apps feel so smooth is by avoiding expensive operations during interactions and animations. In React Native, we currently have a limitation that there is only a single JS execution thread, but you can use InteractionManager to make sure long-running work is scheduled to start after any interactions/animations have completed.

    Applications can schedule tasks to run after interactions with the following:

    InteractionManager.runAfterInteractions(() => { +Timers – React Native | A framework for building native apps using React

    Timers #

    Edit on GitHub

    Timers are an important part of an application and React Native implements the browser timers.

    Timers #

    • setTimeout, clearTimeout
    • setInterval, clearInterval
    • setImmediate, clearImmediate
    • requestAnimationFrame, cancelAnimationFrame

    requestAnimationFrame(fn) is not the same as setTimeout(fn, 0) - the former will fire after all the frame has flushed, whereas the latter will fire as quickly as possible (over 1000x per second on a iPhone 5S).

    setImmediate is executed at the end of the current JavaScript execution block, right before sending the batched response back to native. Note that if you call setImmediate within a setImmediate callback, it will be executed right away, it won't yield back to native in between.

    The Promise implementation uses setImmediate as its asynchronicity primitive.

    InteractionManager #

    One reason why well-built native apps feel so smooth is by avoiding expensive operations during interactions and animations. In React Native, we currently have a limitation that there is only a single JS execution thread, but you can use InteractionManager to make sure long-running work is scheduled to start after any interactions/animations have completed.

    Applications can schedule tasks to run after interactions with the following:

    InteractionManager.runAfterInteractions(() => { // ...long-running synchronous task... });

    Compare this to other scheduling alternatives:

    • requestAnimationFrame(): for code that animates a view over time.
    • setImmediate/setTimeout/setInterval(): run code later, note this may delay animations.
    • runAfterInteractions(): run code later, without delaying active animations.

    The touch handling system considers one or more active touches to be an 'interaction' and will delay runAfterInteractions() callbacks until all touches have ended or been cancelled.

    InteractionManager also allows applications to register animations by creating an interaction 'handle' on animation start, and clearing it upon completion:

    var handle = InteractionManager.createInteractionHandle(); // run animation... (`runAfterInteractions` tasks are queued) @@ -14,7 +14,7 @@ 500 ); } -});

    This will eliminate a lot of hard work tracking down bugs, such as crashes caused by timeouts firing after a component has been unmounted.

    Keep in mind that if you use ES6 classes for your React components there is no built-in API for mixins. To use TimerMixin with ES6 classes, we recommend react-mixin.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/toastandroid.html b/docs/toastandroid.html index f8c59e09f30..28393aebbfb 100644 --- a/docs/toastandroid.html +++ b/docs/toastandroid.html @@ -1,5 +1,5 @@ -ToastAndroid – React Native | A framework for building native apps using React

    ToastAndroid #

    Edit on GitHub

    This exposes the native ToastAndroid module as a JS module. This has a function 'show' -which takes the following parameters:

    1. String message: A string with the text to toast
    2. int duration: The duration of the toast. May be ToastAndroid.SHORT or ToastAndroid.LONG

    Methods #

    static show(message, duration) #

    Properties #

    SHORT: MemberExpression #

    LONG: MemberExpression #

    Examples #

    Edit on GitHub
    'use strict'; +ToastAndroid – React Native | A framework for building native apps using React

    ToastAndroid #

    Edit on GitHub

    This exposes the native ToastAndroid module as a JS module. This has a function 'show' +which takes the following parameters:

    1. String message: A string with the text to toast
    2. int duration: The duration of the toast. May be ToastAndroid.SHORT or ToastAndroid.LONG

    Methods #

    static show(message, duration) #

    Properties #

    SHORT: MemberExpression #

    LONG: MemberExpression #

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -52,7 +52,7 @@ which takes the following parameters:

    1. String message: A string with t }, }); -module.exports = ToastExample;
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/toolbarandroid.html b/docs/toolbarandroid.html index c8a180e2ae6..84b658d9588 100644 --- a/docs/toolbarandroid.html +++ b/docs/toolbarandroid.html @@ -1,4 +1,4 @@ -ToolbarAndroid – React Native | A framework for building native apps using React

    ToolbarAndroid #

    Edit on GitHub

    React component that wraps the Android-only Toolbar widget. A Toolbar can display a logo, +ToolbarAndroid – React Native | A framework for building native apps using React

    ToolbarAndroid #

    Edit on GitHub

    React component that wraps the Android-only Toolbar widget. A Toolbar can display a logo, navigation icon (e.g. hamburger menu), a title & subtitle and a list of actions. The title and subtitle are expanded so the logo and navigation icons are displayed on the left, title and subtitle in the middle and the actions on the right.

    If the toolbar has an only child, it will be displayed between the title and actions.

    Although the Toolbar supports remote images for the logo, navigation and action icons, this @@ -31,7 +31,7 @@ along well-known gridlines.

    onIconClicked function #

    Callback called when the icon is selected.

    overflowIcon optionalImageSource #

    Sets the overflow icon.

    rtl bool #

    Used to set the toolbar direction to RTL. In addition to this property you need to add

    android:supportsRtl="true"

    to your application AndroidManifest.xml and then call setLayoutDirection(LayoutDirection.RTL) in your MainActivity -onCreate method.

    subtitle string #

    Sets the toolbar subtitle.

    subtitleColor color #

    Sets the toolbar subtitle color.

    testID string #

    Used to locate this view in end-to-end tests.

    title string #

    Sets the toolbar title.

    titleColor color #

    Sets the toolbar title color.

    Examples #

    Edit on GitHub
    'use strict'; +onCreate method.

    subtitle string #

    Sets the toolbar subtitle.

    subtitleColor color #

    Sets the toolbar subtitle color.

    testID string #

    Used to locate this view in end-to-end tests.

    title string #

    Sets the toolbar title.

    titleColor color #

    Sets the toolbar title color.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -149,7 +149,7 @@ In addition to this property you need to add

    android:supportsRtl="t }, }); -module.exports = ToolbarAndroidExample;

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/touchablehighlight.html b/docs/touchablehighlight.html index 23d727d7f47..35711eb706c 100644 --- a/docs/touchablehighlight.html +++ b/docs/touchablehighlight.html @@ -1,4 +1,4 @@ -TouchableHighlight – React Native | A framework for building native apps using React

    TouchableHighlight #

    Edit on GitHub

    A wrapper for making views respond properly to touches. +TouchableHighlight – React Native | A framework for building native apps using React

    TouchableHighlight #

    Edit on GitHub

    A wrapper for making views respond properly to touches. On press down, the opacity of the wrapped view is decreased, which allows the underlay color to show through, darkening or tinting the view. The underlay comes from adding a view to the view hierarchy, which can sometimes @@ -14,7 +14,7 @@ backgroundColor of the wrapped view isn't explicitly set to an opaque color ); },

    NOTE: TouchableHighlight supports only one child

    If you wish to have several child components, wrap them in a View.

    Props #

    activeOpacity number #

    Determines what the opacity of the wrapped view should be when touch is active.

    onHideUnderlay function #

    Called immediately after the underlay is hidden

    onShowUnderlay function #

    Called immediately after the underlay is shown

    underlayColor color #

    The color of the underlay that will show through when the touch is -active.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/touchablenativefeedback.html b/docs/touchablenativefeedback.html index a495da76266..6541e82baf3 100644 --- a/docs/touchablenativefeedback.html +++ b/docs/touchablenativefeedback.html @@ -1,4 +1,4 @@ -TouchableNativeFeedback – React Native | A framework for building native apps using React

    TouchableNativeFeedback #

    Edit on GitHub

    A wrapper for making views respond properly to touches (Android only). +TouchableNativeFeedback – React Native | A framework for building native apps using React

    TouchableNativeFeedback #

    Edit on GitHub

    A wrapper for making views respond properly to touches (Android only). On Android this component uses native state drawable to display touch feedback. At the moment it only supports having a single View instance as a child node, as it's implemented by replacing that View with another instance @@ -16,14 +16,14 @@ of RCTView node with some additional properties set.

    Background drawable o },

    Props #

    background backgroundPropType #

    Determines the type of background drawable that's going to be used to display feedback. It takes an object with type property and extra data depending on the type. It's recommended to use one of the static -methods to generate that dictionary.

    Methods #

    static SelectableBackground() #

    Creates an object that represents android theme's default background for -selectable elements (?android:attr/selectableItemBackground).

    static SelectableBackgroundBorderless() #

    Creates an object that represent android theme's default background for borderless +methods to generate that dictionary.

    Methods #

    static SelectableBackground(0) #

    Creates an object that represents android theme's default background for +selectable elements (?android:attr/selectableItemBackground).

    static SelectableBackgroundBorderless(0) #

    Creates an object that represent android theme's default background for borderless selectable elements (?android:attr/selectableItemBackgroundBorderless). -Available on android API level 21+.

    static Ripple(color: string, borderless: boolean) #

    Creates an object that represents ripple drawable with specified color (as a +Available on android API level 21+.

    static Ripple(color, borderless) #

    Creates an object that represents ripple drawable with specified color (as a string). If property borderless evaluates to true the ripple will render outside of the view bounds (see native actionbar buttons as an example of that behavior). This background type is available on Android -API level 21+.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/touchableopacity.html b/docs/touchableopacity.html index 0fc9c047bce..88691d3ade6 100644 --- a/docs/touchableopacity.html +++ b/docs/touchableopacity.html @@ -1,4 +1,4 @@ -TouchableOpacity – React Native | A framework for building native apps using React

    TouchableOpacity #

    Edit on GitHub

    A wrapper for making views respond properly to touches. +TouchableOpacity – React Native | A framework for building native apps using React

    TouchableOpacity #

    Edit on GitHub

    A wrapper for making views respond properly to touches. On press down, the opacity of the wrapped view is decreased, dimming it. This is done without actually changing the view hierarchy, and in general is easy to add to an app without weird side-effects.

    Example:

    renderButton: function() { @@ -11,7 +11,7 @@ easy to add to an app without weird side-effects.

    Example:

    /TouchableOpacity> ); },

    Props #

    activeOpacity number #

    Determines what the opacity of the wrapped view should be when touch is -active. Defaults to 0.2.

    Methods #

    setOpacityTo(value: number) #

    Animate the touchable to a new opacity.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/touchablewithoutfeedback.html b/docs/touchablewithoutfeedback.html index 9251acbf113..5e0abcaf06f 100644 --- a/docs/touchablewithoutfeedback.html +++ b/docs/touchablewithoutfeedback.html @@ -1,4 +1,4 @@ -TouchableWithoutFeedback – React Native | A framework for building native apps using React

    TouchableWithoutFeedback #

    Edit on GitHub

    Do not use unless you have a very good reason. All the elements that +TouchableWithoutFeedback – React Native | A framework for building native apps using React

    TouchableWithoutFeedback #

    Edit on GitHub

    Do not use unless you have a very good reason. All the elements that respond to press should have a visual feedback when touched. This is one of the primary reason a "web" app doesn't feel "native".

    NOTE: TouchableWithoutFeedback supports only one child

    If you wish to have several child components, wrap them in a View.

    Props #

    accessibilityComponentType View.AccessibilityComponentType #

    accessibilityTraits View.AccessibilityTraits, [object Object] #

    accessible bool #

    delayLongPress number #

    Delay in ms, from onPressIn, before onLongPress is called.

    delayPressIn number #

    Delay in ms, from the start of the touch, before onPressIn is called.

    delayPressOut number #

    Delay in ms, from the release of the touch, before onPressOut is called.

    disabled bool #

    If true, disable all interactions for this component.

    hitSlop {top: number, left: number, bottom: number, right: number} #

    This defines how far your touch can start away from the button. This is added to pressRetentionOffset when moving off of the button. @@ -10,7 +10,7 @@ that steals the responder lock).

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/transforms.html b/docs/transforms.html index 61c9d87cf4c..47c4ee1979b 100644 --- a/docs/transforms.html +++ b/docs/transforms.html @@ -1,4 +1,4 @@ -Transforms – React Native | A framework for building native apps using React

    Transforms #

    Edit on GitHub

    Props #

    decomposedMatrix DecomposedMatrixPropType #

    transform [{perspective: number}, {rotate: string}, {rotateX: string}, {rotateY: string}, {rotateZ: string}, {scale: number}, {scaleX: number}, {scaleY: number}, {translateX: number}, {translateY: number}, {skewX: string}, {skewY: string}] #

    transformMatrix TransformMatrixPropType #

    © 2016 Facebook Inc.

    Transforms #

    Edit on GitHub

    Props #

    decomposedMatrix DecomposedMatrixPropType #

    transform [{perspective: number}, {rotate: string}, {rotateX: string}, {rotateY: string}, {rotateZ: string}, {scale: number}, {scaleX: number}, {scaleY: number}, {translateX: number}, {translateY: number}, {skewX: string}, {skewY: string}] #

    transformMatrix TransformMatrixPropType #

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/troubleshooting.html b/docs/troubleshooting.html index 2067b8af153..f6cdfa5d250 100644 --- a/docs/troubleshooting.html +++ b/docs/troubleshooting.html @@ -1,19 +1,12 @@ -Troubleshooting – React Native | A framework for building native apps using React

    Troubleshooting #

    Edit on GitHub

    Cmd-R does not reload the simulator #

    Enable iOS simulator's "Connect hardware keyboard" from menu Hardware > Keyboard menu.

    Keyboard Menu

    If you are using a non-QWERTY/AZERTY keyboard layout you can use the Hardware > Shake Gesture to bring up the dev menu and click "Refresh". Alternatively, you can hit Cmd-P on Dvorak/Colemak layouts to reload the simulator.

    Port already in use red-screen #

    red-screen

    Something is probably already running on port 8081. You can either kill it or try to change which port the packager is listening to.

    Kill process on port 8081 #

    $ sudo lsof -n -i4TCP:8081 | grep LISTEN

    then

    $ kill -9 <cma process id>

    Change the port in Xcode #

    Edit AppDelegate.m to use a different port.

    // OPTION 1 - // Load from development server. Start the server from the repository root: - // - // $ npm start - // - // To run on device, change `localhost` to the IP address of your computer, and make sure your computer and - // iOS device are on the same Wi-Fi network. - jsCodeLocation = [NSURL URLWithString:@"http://localhost:9381/index.ios.bundle"];

    Watchman took too long to load #

    Permission settings prevent Watchman from loading. A recent update solves this, get a HEAD install of Watchman if you are experiencing this error.

    brew uninstall watchman -brew install --HEAD watchman

    NPM locking error #

    If in the react-native init <project> phase you saw npm fail with "npm WARN locking Error: EACCES" then try the following:

    sudo chown -R $USER ~/.npm -sudo chown -R $USER /usr/local/lib/node_modules

    Debugging in Chrome hangs and/or does not work well #

    It is possible that one of your Chrome extensions is interacting in unexpected ways with the debugger. If you are having this issue, try disabling all of your extensions and re-enabling them one-by-one until you find the problematic extension.

    Xcode Build Failures #

    To see the exact error that is causing your build to fail, go into the Issues Navigator in the left sidebar.

    React libraries missing #

    If you are using CocoaPods, verify that you have added React along with the subspecs to the Podfile. For example, if you were using the <Text />, <Image /> and fetch() APIs, you would need to add these in your Podfile:

    pod 'React', :path => '../node_modules/react-native', :subspecs => [ +Troubleshooting – React Native | A framework for building native apps using React

    Troubleshooting #

    Edit on GitHub

    These are some common issues you may run into while setting up React Native. If you encounter something that is not listed here, try searching for the issue in GitHub.

    Port already in use #

    The React Native packager runs on port 8081. If another process is already using that port (such as McAfee Antivirus on Windows), you can either terminate that process, or change the port that the packager uses.

    Terminating a process on port 8081 #

    Run the following command on a Mac to find the id for the process that is listening on port 8081:

    $ sudo lsof -n -i4TCP:8081 | grep LISTEN

    Then run the following to terminate the process:

    $ kill -9 <PID>

    Using a port other than 8081 #

    You can configure the packager to use a port other than 8081 by using the port parameter:

    $ react-native start --port=8088

    You will also need to update your applications to load the JavaScript bundle from the new port.

    To change the port used by an iOS application, edit the AppDelegate.m file in the ios folder. Scroll down to the line where the bundle location is defined, and replace 8081 with the new port.

    jsCodeLocation = [NSURL URLWithString:@"http://localhost:8088/index.ios.bundle"];

    NPM locking error #

    If you encounter an error such as "npm WARN locking Error: EACCES" while using the React Native CLI, try running the following:

    sudo chown -R $USER ~/.npm +sudo chown -R $USER /usr/local/lib/node_modules

    Missing libraries for React #

    If you added React Native manually to your project, make sure you have included all the relevant dependencies that you are using, like RCTText.xcodeproj, RCTImage.xcodeproj. Next, the binaries built by these dependencies have to be linked to your app binary. Use the Linked Frameworks and Binaries section in the Xcode project settings. More detailed steps are here: Linking Libraries.

    If you are using CocoaPods, verify that you have added React along with the subspecs to the Podfile. For example, if you were using the <Text />, <Image /> and fetch() APIs, you would need to add these in your Podfile:

    pod 'React', :path => '../node_modules/react-native', :subspecs => [ 'RCTText', 'RCTImage', 'RCTNetwork', 'RCTWebSocket', -]

    Next, make sure you have run pod install and that a Pods/ directory has been created in your project with React installed. CocoaPods will instruct you to use the generated .xcworkspace file henceforth to be able to use these installed dependencies.

    If you are adding React manually, make sure you have included all the relevant dependencies, like RCTText.xcodeproj, RCTImage.xcodeproj depending on the ones you are using. Next, the binaries built by these dependencies have to be linked to your app binary. Use the Linked Frameworks and Binaries section in the Xcode project settings. More detailed steps are here: Linking Libraries.

    Argument list too long: recursive header expansion failed #

    In the project's build settings, User Search Header Paths and Header Search Paths are two configs that specify where Xcode should look for #import header files specified in the code. For Pods, CocoaPods uses a default array of specific folders to look in. Verify that this particular config is not overwritten, and that none of the folders configured are too large. If one of the folders is a large folder, Xcode will attempt to recursively search the entire directory and throw above error at some point.

    To revert the User Search Header Paths and Header Search Paths build settings to their defaults set by CocoaPods - select the entry in the Build Settings panel, and hit delete. It will remove the custom override and return to the CocoaPod defaults.

    Unable to connect to development server #

    iOS #

    Ensure that you are on the same WiFi network as your computer. If you're using a cell data plan, your phone can't access your computer's local IP address.

    Android #

    You need to run adb reverse tcp:8081 tcp:8081 to forward requests from the device to your computer. This works only on Android 5.0 and newer.

    Module that uses WebSocket (such as Firebase) throws an exception #

    React Native implements a polyfill for WebSockets. These polyfills are initialized as part of the react-native module that you include in your application through import React from 'react-native'. If you load another module that requires WebSockets, be sure to load/require it after react-native.

    So:

    import React from 'react-native'; -import Firebase from 'firebase';

    Requiring firebase before react-native will result in a 'No transports available' redbox.

    Discovered thanks to issue #3645. If you're curious, the polyfills are set up in InitializeJavaScriptAppEngine.js.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/tutorial-core-components.html b/docs/tutorial-core-components.html deleted file mode 100644 index 56f40d16ae4..00000000000 --- a/docs/tutorial-core-components.html +++ /dev/null @@ -1,86 +0,0 @@ -Core Components – React Native | A framework for building native apps using React

    Core Components #

    Edit on GitHub

    Components are the building blocks for a React Native application. A React Native user interface (UI) is specified by declaring components, possibly nested, and then those components are mapped to the native UI on the targeted platform.

    React Native has a number of core components that are commonly used in applications, either on their own or combined to build new components.

    Text #

    The most basic component in React Native is the Text component. The Text component simply renders text.

    This example displays the string "Hello" on the device.

    import React from 'react'; -import { AppRegistry, Text } from 'react-native'; - -const App = () => { - return ( - <Text>Hello World!</Text> - ); -} - -// App registration and rendering -AppRegistry.registerComponent('MyApp', () => App);

    Image #

    The other basic React Native component is the Image component. Like Text, the Image component simply renders an image.

    An Image is analogous to using img when building websites.

    The simplest way to render an image is to provide a source file to that image via the source attribute.

    This example displays a checkbox Image on the device.

    import React from 'react'; -import { AppRegistry, Image } from 'react-native'; - -const App = () => { - return ( - <Image source={require('./img/check.png')} /> - ); -} - -// App registration and rendering -AppRegistry.registerComponent('MyApp', () => App);

    View #

    A View is the most basic building block for a React Native application. The View is an abstraction on top of the target platform's native equivalent, such as iOS's UIView.

    A View is analogous to using a div for building websites.

    While basic components such as Text and Image, can be displayed without a View, this is not generally recommended since the View gives you the control for styling and layout of those components.

    This example creates a View that aligns the string Hello in the top center of the device, something which could not be done with a Text component alone (i.e., a Text component without a View would place the string in a fixed location in the upper corner):

    import React from 'react'; -import { AppRegistry, Text, View } from 'react-native'; - -const App = () => { - return ( - <View style={{alignItems: 'center'}}> - <Text>Hello!</Text> - </View> - ); -} - -// App registration and rendering -AppRegistry.registerComponent('MyApp', () => App);

    TextInput #

    Direct text-based user input is a foundation for many apps. Writing a post or comment on a page is a canonical example of this. TextInput is a basic component that allows the user to enter text.

    This example creates a simple TextInput box with the string Hello as the placeholder when the TextInput is empty.

    import React, { AppRegistry, TextInput, View } from 'react-native' - -const App = () => { - return ( - <View> - <TextInput placeholder="Hello" /> - </View> - ); -} - -// App registration and rendering -AppRegistry.registerComponent('MyApp', () => App);

    ListView #

    On mobile devices, lists are a core element in many applications. The ListView component is a special type of View that displays a vertically scrolling list of changing data.

    The ListView component requires two properties, dataSource and renderRow. dataSource is the actual source of information that will be part of the list. renderRow takes the data and returns a renderable component to display.

    This example creates a simple ListView of hardcoded data. It first initializes the datasource that will be used to populate the ListView. Then it renders that ListView with that data.

    A rowHasChanged function is required to use ListView. Here we just say a row has changed if the row we are on is not the same as the previous row.

    import React from 'react'; -import { AppRegistry, Text, View, ListView} from 'react-native'; - -var SimpleList = React.createClass({ - // Initialize the hardcoded data - getInitialState: function() { - var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); - return { - dataSource: ds.cloneWithRows(['John', 'Joel', 'James', 'Jimmy', 'Jackson', 'Jillian', 'Julie']) - }; - }, - render: function() { - return ( - <View> - <ListView - dataSource={this.state.dataSource} - renderRow={(rowData) => <Text>{rowData}</Text>} - /> - </View> - ); - } -}); - -// App registration and rendering -AppRegistry.registerComponent('MyApp', () => SimpleList);

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/tutorial.html b/docs/tutorial.html new file mode 100644 index 00000000000..db40be24c81 --- /dev/null +++ b/docs/tutorial.html @@ -0,0 +1,32 @@ +Tutorial – React Native | A framework for building native apps using React

    Tutorial #

    Edit on GitHub

    React Native is like React, but it uses native components instead of web components as building blocks. So to understand the basic structure of a React Native app, you need to understand some of the basic React concepts, like JSX, components, state, and props. If you already know React, you still need to learn some React-Native-specific stuff, like the native components. This +tutorial is aimed at all audiences, whether you have React experience or not.

    Let's do this thing.

    Hello World #

    In accordance with the ancient traditions of our people, we must first build an app that does nothing except say "Hello world". Here it is:

    import React, { Component } from 'react'; +import { AppRegistry, Text } from 'react-native'; + +class HelloWorldApp extends Component { + render() { + return ( + <Text>Hello world!</Text> + ); + } +} + +AppRegistry.registerComponent('HelloWorldApp', () => HelloWorldApp);

    If you are feeling curious, you can play around with sample code directly in the web simulators. You can also paste it into your index.ios.js or index.android.js file to create a real app on your local machine.

    What's going on here? #

    Some of the things in here might not look like JavaScript to you. Don't panic. This is the future.

    First of all, ES2015 (also known as ES6) is a set of improvements to JavaScript that is now part of the official standard, but not yet supported by all browsers, so often it isn't used yet in web development. React Native ships with ES2015 support, so you can use this stuff without worrying about compatibility. import, from, class, extends, and the () => syntax in the example above are all ES2015 features. If you aren't familiar with ES2015, you can probably pick it up just by reading through sample code like this tutorial has. If you want, this page has a good overview of ES2015 features.

    The other unusual thing in this code example is <Text>Hello world!</Text>. This is JSX - a syntax for embedding XML within JavaScript. Many frameworks use a special templating language which lets you embed code inside markup language. In React, this is reversed. JSX lets you write your markup language inside code. It looks like HTML on the web, except instead of web things like <div> or <span>, you use React components. In this case, <Text> +is a built-in component that just displays some text.

    Component and AppRegistry #

    So this code is defining HelloWorldApp, a new Component, and it's registering it with the AppRegistry. When you're building a React Native app, you'll be making new components a lot. Anything you see on the screen is some sort of component. A component can be pretty simple - the only thing that's required is a render function which returns some JSX to render.

    The AppRegistry just tells React Native which component is the root one for the whole application. You won't be thinking about AppRegistry a lot - there will probably just be one call to AppRegistry.registerComponent in your whole app. It's included in these examples so you can paste the whole thing into your index.ios.js or index.android.js file and get it running.

    This App Doesn't Do Very Much #

    Good point. To make components do more interesting things, you need to learn about Props.

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/upgrading.html b/docs/upgrading.html index 5385f5ac9a2..c4b3cce0239 100644 --- a/docs/upgrading.html +++ b/docs/upgrading.html @@ -1,4 +1,4 @@ -Upgrading – React Native | A framework for building native apps using React

    Upgrading #

    Edit on GitHub

    Upgrading to new versions of React Native will give you access to more APIs, views, developer tools +Upgrading – React Native | A framework for building native apps using React

    Upgrading #

    Edit on GitHub

    Upgrading to new versions of React Native will give you access to more APIs, views, developer tools and other goodies. Because React Native projects are essentially made up of an Android project, an iOS project and a JavaScript project, all combined under an npm package, upgrading can be rather tricky. But we try to make it easy for you. Here's what you need to do to upgrade from an older @@ -6,7 +6,7 @@ version of React Native:

    $ react-native upgrade

    This will check your files against the latest template and perform the following:

    Manual Upgrades #

    Xcode project format is pretty complex and sometimes it's tricky to upgrade and merge new changes.

    From 0.13 to 0.14 #

    The major change in this version happened to the CLI (see changelog) and static images (see docs). To use the new asset system in existing Xcode project, do the following:

    Add new "Run Script" step to your project's build phases:

    Set the script to

    ../node_modules/react-native/packager/react-native-xcode.sh

    Move main.jsbundle to Trash (it will be generated automatically by Xcode using the script above)

    If you installed Node via nvm, you might experience "react-native: command not found". See issues/3974 for workaround and pull/4015 for the fix.

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/using-a-listview.html b/docs/using-a-listview.html new file mode 100644 index 00000000000..92d8bd50b8d --- /dev/null +++ b/docs/using-a-listview.html @@ -0,0 +1,46 @@ +Using a ListView – React Native | A framework for building native apps using React

    Using a ListView #

    Edit on GitHub

    The ListView component displays a vertically scrolling list of changing, but similarly structured, data.

    ListView works well for long lists of data, where the number of items might change over time. Unlike the more generic ScrollView, the ListView only renders elements that are currently showing on the screen, not all the elements at once.

    The ListView component requires two props: dataSource and renderRow. dataSource is the source of information for the list. renderRow takes one item from the source and returns a formatted component to render.

    This example creates a simple ListView of hardcoded data. It first initializes the dataSource that will be used to populate the ListView. Each item in the dataSource is then rendered as a Text component. Finally it renders the ListView and all Text components.

    A rowHasChanged function is required to use ListView. Here we just say a row has changed if the row we are on is not the same as the previous row.

    import React, { Component } from 'react'; +import { AppRegistry, ListView, Text, View } from 'react-native'; + +class ListViewBasics extends Component { + // Initialize the hardcoded data + constructor(props) { + super(props); + const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); + this.state = { + dataSource: ds.cloneWithRows([ + 'John', 'Joel', 'James', 'Jimmy', 'Jackson', 'Jillian', 'Julie', 'Devin' + ]) + }; + } + render() { + return ( + <View style={{paddingTop: 22}}> + <ListView + dataSource={this.state.dataSource} + renderRow={(rowData) => <Text>{rowData}</Text>} + /> + </View> + ); + } +} + +// App registration and rendering +AppRegistry.registerComponent('AwesomeProject', () => ListViewBasics);

    One of the most common uses for a ListView is displaying data that you fetch from a server. To do that, you will need to learn about networking in React Native.

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/using-a-scrollview.html b/docs/using-a-scrollview.html new file mode 100644 index 00000000000..fae64f28dfb --- /dev/null +++ b/docs/using-a-scrollview.html @@ -0,0 +1,65 @@ +Using a ScrollView – React Native | A framework for building native apps using React

    Using a ScrollView #

    Edit on GitHub

    The ScrollView is a generic scrolling container that can host multiple components and views. The scrollable items need not be homogenous, and you can scroll both vertically and horizontally (by setting the horizontal property).

    This example creates a vertical ScrollView with both images and text mixed together.

    import React, { Component } from 'react'; +import{ AppRegistry, ScrollView, Image, Text, View } from 'react-native' + +class IScrolledDownAndWhatHappenedNextShockedMe extends Component { + render() { + return( + <ScrollView> + <Text style={{fontSize:96}}>Scroll me plz</Text> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Text style={{fontSize:96}}>If you like</Text> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Text style={{fontSize:96}}>Scrolling down</Text> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Text style={{fontSize:96}}>What's the best</Text> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Text style={{fontSize:96}}>Framework around?</Text> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Image source={require('./img/favicon.png')} /> + <Text style={{fontSize:80}}>React Native</Text> + </ScrollView> + ); + } +} + + +AppRegistry.registerComponent( + 'IScrolledDownAndWhatHappenedNextShockedMe', + () => IScrolledDownAndWhatHappenedNextShockedMe);

    ScrollView works best to present a small amount of things of a limited size. All the elements and views of a ScrollView are rendered, even if they are not currently shown on the screen. If you have a long list of more items that can fit on the screen, you should use a ListView instead. So let's learn about the ListView next.

    Recently, we have been working hard to make the documentation better based on your feedback. Your responses to this yes/no style survey will help us gauge whether we moved in the right direction with the improvements. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/vibration.html b/docs/vibration.html index 6d098e67052..8d43c3c19a0 100644 --- a/docs/vibration.html +++ b/docs/vibration.html @@ -1,6 +1,6 @@ -Vibration – React Native | A framework for building native apps using React

    Vibration #

    Edit on GitHub

    The Vibration API is exposed at Vibration.vibrate(). +Vibration – React Native | A framework for building native apps using React

    Vibration #

    Edit on GitHub

    The Vibration API is exposed at Vibration.vibrate(). The vibration is asynchronous so this method will return immediately.

    There will be no effect on devices that do not support Vibration, eg. the simulator.

    Note for android -add <uses-permission android:name="android.permission.VIBRATE"/> to AndroidManifest.xml

    Vibration patterns are currently unsupported.

    Methods #

    static vibrate(pattern, repeat) #

    static cancel() #

    Stop vibration

    @platform android

    Examples #

    Edit on GitHub
    'use strict'; +add <uses-permission android:name="android.permission.VIBRATE"/> to AndroidManifest.xml

    Vibration patterns are currently unsupported.

    Methods #

    static vibrate(pattern, repeat) #

    static cancel(0) #

    Stop vibration

    @platform android

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -83,7 +83,7 @@ exports.examples : '#eeeeee', padding: 10, }, -});
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/vibrationios.html b/docs/vibrationios.html index 368d74b9ba5..038997c5a57 100644 --- a/docs/vibrationios.html +++ b/docs/vibrationios.html @@ -1,7 +1,7 @@ -VibrationIOS – React Native | A framework for building native apps using React

    VibrationIOS #

    Edit on GitHub

    NOTE: VibrationIOS is being deprecated. Use Vibration instead.

    The Vibration API is exposed at VibrationIOS.vibrate(). On iOS, calling this +VibrationIOS – React Native | A framework for building native apps using React

    VibrationIOS #

    Edit on GitHub

    NOTE: VibrationIOS is being deprecated. Use Vibration instead.

    The Vibration API is exposed at VibrationIOS.vibrate(). On iOS, calling this function will trigger a one second vibration. The vibration is asynchronous so this method will return immediately.

    There will be no effect on devices that do not support Vibration, eg. the iOS -simulator.

    Vibration patterns are currently unsupported.

    Methods #

    static vibrate() #

    @deprecated

    Examples #

    Edit on GitHub
    'use strict'; +simulator.

    Vibration patterns are currently unsupported.

    Methods #

    static vibrate(0) #

    @deprecated

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -40,7 +40,7 @@ exports.examples : '#eeeeee', padding: 10, }, -});
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/videos.html b/docs/videos.html deleted file mode 100644 index 6dcbe3fdc4d..00000000000 --- a/docs/videos.html +++ /dev/null @@ -1,67 +0,0 @@ -Videos – React Native | A framework for building native apps using React

    Videos #

    Edit on GitHub

    React.js Conf 2016 #

    - - - - - - - - - - - - - - - - - - - - - - - - -

    React.js Conf 2015 #

    - - - - - - - - - - - - - -

    The Changelog #149 #

    With Christopher "vjeux" Chedeau and Spencer Ahrens

    - -

    JSJabber #146 #

    With Christopher "vjeux" Chedeau and Jordan Walke

    -

    We are planning improvements to the React Native documentation. Your responses to this short survey will go a long way in helping us provide valuable content. Thank you!

    Take Survey
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/view.html b/docs/view.html index 9f2bb9bbae2..cabfd98abab 100644 --- a/docs/view.html +++ b/docs/view.html @@ -1,87 +1,104 @@ -View – React Native | A framework for building native apps using React

    View #

    Edit on GitHub

    The most fundamental component for building UI, View is a -container that supports layout with flexbox, style, some touch handling, and -accessibility controls, and is designed to be nested inside other views and -to have 0 to many children of any type. View maps directly to the native -view equivalent on whatever platform React is running on, whether that is a -UIView, <div>, android.view, etc. This example creates a View that -wraps two colored boxes and custom component in a row with padding.

    <View style={{flexDirection: 'row', height: 100, padding: 20}}> - <View style={{backgroundColor: 'blue', flex: 0.3}} /> - <View style={{backgroundColor: 'red', flex: 0.5}} /> - <MyCustomComponent {...customProps} /> -</View>

    Views are designed to be used with StyleSheets for clarity and -performance, although inline styles are also supported.

    Props #

    accessibilityLabel string #

    Overrides the text that's read by the screen reader when the user interacts +View – React Native | A framework for building native apps using React

    View #

    Edit on GitHub

    The most fundamental component for building a UI, View is a container that supports layout with +flexbox, style, +some touch handling, and +accessibility controls. View maps directly to the +native view equivalent on whatever platform React Native is running on, whether that is a +UIView, <div>, android.view, etc.

    View is designed to be nested inside other views and can have 0 to many children of any type.

    This example creates a View that wraps two colored boxes and a text component in a row with +padding.

    class ViewColoredBoxesWithText extends Component { + render() { + return ( + <View style={{flexDirection: 'row', height: 100, padding: 20}}> + <View style={{backgroundColor: 'blue', flex: 0.3}} /> + <View style={{backgroundColor: 'red', flex: 0.5}} /> + <Text>Hello World!</Text> + </View> + ); + } +}

    Views are designed to be used with StyleSheet for clarity +and performance, although inline styles are also supported.

    Synthetic Touch Events #

    For View repsonder props (e.g., onResponderMove), the synthetic touch event passed to them +are of the following form:

    • nativeEvent
      • changedTouches - Array of all touch events that have changed since the last event.
      • identifier - The ID of the touch.
      • locationX - The X position of the touch, relative to the element.
      • locationY - The Y position of the touch, relative to the element.
      • pageX - The X position of the touch, relative to the root element.
      • pageY - The Y position of the touch, relative to the root element.
      • target - The node id of the element receiving the touch event.
      • timestamp - A time identifier for the touch, useful for velocity calculation.
      • touches - Array of all current touches on the screen.

    Props #

    accessibilityLabel string #

    Overrides the text that's read by the screen reader when the user interacts with the element. By default, the label is constructed by traversing all the -children and accumulating all the Text nodes separated by space.

    accessible bool #

    When true, indicates that the view is an accessibility element. By default, +children and accumulating all the Text nodes separated by space.

    accessible bool #

    When true, indicates that the view is an accessibility element. By default, all the touchable elements are accessible.

    hitSlop {top: number, left: number, bottom: number, right: number} #

    This defines how far a touch event can start away from the view. Typical interface guidelines recommend touch targets that are at least -30 - 40 points/density-independent pixels. If a Touchable view has a -height of 20 the touchable height can be extended to 40 with -hitSlop={{top: 10, bottom: 10, left: 0, right: 0}} - NOTE -The touch area never extends past the parent view bounds and the Z-index +30 - 40 points/density-independent pixels.

    For example, if a touchable view has a height of 20 the touchable height can be extended to +40 with hitSlop={{top: 10, bottom: 10, left: 0, right: 0}}

    The touch area never extends past the parent view bounds and the Z-index of sibling views always takes precedence if a touch hits two overlapping -views.

    onAccessibilityTap function #

    When accessible is true, the system will try to invoke this function -when the user performs accessibility tap gesture.

    onLayout function #

    Invoked on mount and layout changes with

    {nativeEvent: { layout: {x, y, width, height}}}.

    This event is fired immediately once the layout has been calculated, but +views.

    onAccessibilityTap function #

    When accessible is true, the system will try to invoke this function +when the user performs accessibility tap gesture.

    onLayout function #

    Invoked on mount and layout changes with:

    {nativeEvent: { layout: {x, y, width, height}}}

    This event is fired immediately once the layout has been calculated, but the new layout may not yet be reflected on the screen at the time the -event is received, especially if a layout animation is in progress.

    onMagicTap function #

    When accessible is true, the system will invoke this function when the -user performs the magic tap gesture.

    onMoveShouldSetResponder function #

    onMoveShouldSetResponderCapture function #

    onResponderGrant function #

    For most touch interactions, you'll simply want to wrap your component in -TouchableHighlight or TouchableOpacity. Check out Touchable.js, -ScrollResponder.js and ResponderEventPlugin.js for more discussion.

    onResponderMove function #

    onResponderReject function #

    onResponderRelease function #

    onResponderTerminate function #

    onResponderTerminationRequest function #

    onStartShouldSetResponder function #

    onStartShouldSetResponderCapture function #

    pointerEvents enum('box-none', 'none', 'box-only', 'auto') #

    Controls whether the View can be the target of touch events.

    • 'auto': The View can be the target of touch events.
    • 'none': The View is never the target of touch events.
    • 'box-none': The View is never the target of touch events but it's +event is received, especially if a layout animation is in progress.

    onMagicTap function #

    When accessible is true, the system will invoke this function when the +user performs the magic tap gesture.

    onMoveShouldSetResponder function #

    Does this view want to "claim" touch responsiveness? This is called for every touch move on +the View when it is not the responder.

    View.props.onMoveShouldSetResponder: (event) => [true | false], where event is a +synthetic touch event as described above.

    onMoveShouldSetResponderCapture function #

    If a parent View wants to prevent a child View from becoming responder on a move, +it should have this handler which returns true.

    View.props.onMoveShouldSetResponderCapture: (event) => [true | false], where event is a +synthetic touch event as described above.

    onResponderGrant function #

    The View is now responding for touch events. This is the time to highlight and show the user +what is happening.

    View.props.onResponderGrant: (event) => {}, where event is a synthetic touch event as +described above.

    onResponderMove function #

    The user is moving their finger.

    View.props.onResponderMove: (event) => {}, where event is a synthetic touch event as +described above.

    onResponderReject function #

    Another responder is already active and will not release it to that View asking to be +the responder.

    View.props.onResponderReject: (event) => {}, where event is a synthetic touch event as +described above.

    onResponderRelease function #

    Fired at the end of the touch.

    View.props.onResponderRelease: (event) => {}, where event is a synthetic touch event as +described above.

    onResponderTerminate function #

    The responder has been taken from the View. Might be taken by other views after a call to +onResponderTerminationRequest, or might be taken by the OS without asking (e.g., happens +with control center/ notification center on iOS)

    View.props.onResponderTerminate: (event) => {}, where event is a synthetic touch event as +described above.

    onResponderTerminationRequest function #

    Some other View wants to become responder and is asking this View to release its +responder. Returning true allows its release.

    View.props.onResponderTerminationRequest: (event) => {}, where event is a synthetic touch +event as described above.

    onStartShouldSetResponder function #

    Does this view want to become responder on the start of a touch?

    View.props.onStartShouldSetResponder: (event) => [true | false], where event is a +synthetic touch event as described above.

    onStartShouldSetResponderCapture function #

    If a parent View wants to prevent a child View from becoming responder on a touch start, +it should have this handler which returns true.

    View.props.onStartShouldSetResponderCapture: (event) => [true | false], where event is a +synthetic touch event as described above.

    pointerEvents enum('box-none', 'none', 'box-only', 'auto') #

    Controls whether the View can be the target of touch events.

    • 'auto': The View can be the target of touch events.
    • 'none': The View is never the target of touch events.
    • 'box-none': The View is never the target of touch events but it's subviews can be. It behaves like if the view had the following classes in CSS:
      .box-none { pointer-events: none; } .box-none * { pointer-events: all; -}
    • 'box-only': The view can be the target of touch events but it's +}
  • 'box-only': The view can be the target of touch events but it's subviews cannot be. It behaves like if the view had the following classes in CSS:
    .box-only { pointer-events: all; } .box-only * { pointer-events: none; -}
  • removeClippedSubviews bool #

    This is a special performance property exposed by RCTView and is useful +}

    Since pointerEvents does not affect layout/appearance, and we are +already deviating from the spec by adding additional modes, we opt to not +include pointerEvents on style. On some platforms, we would need to +implement it as a className anyways. Using style or not is an +implementation detail of the platform.

    removeClippedSubviews bool #

    This is a special performance property exposed by RCTView and is useful for scrolling content when there are many subviews, most of which are offscreen. For this property to be effective, it must be applied to a view that contains many subviews that extend outside its bound. The -subviews must also have overflow: hidden, as should the containing view +subviews must also have overflow: hidden, as should the containing view (or one of its superviews).

    style style #

    backfaceVisibility enum('visible', 'hidden')
    backgroundColor color
    borderBottomColor color
    borderBottomLeftRadius number
    borderBottomRightRadius number
    borderBottomWidth number
    borderColor color
    borderLeftColor color
    borderLeftWidth number
    borderRadius number
    borderRightColor color
    borderRightWidth number
    borderStyle enum('solid', 'dotted', 'dashed')
    borderTopColor color
    borderTopLeftRadius number
    borderTopRightRadius number
    borderTopWidth number
    borderWidth number
    opacity number
    overflow enum('visible', 'hidden')
    androidelevation number

    (Android-only) Sets the elevation of a view, using Android's underlying elevation API. This adds a drop shadow to the item and affects z-order for overlapping views. -Only supported on Android 5.0+, has no effect on earlier versions.

    testID string #

    Used to locate this view in end-to-end tests. NB: disables the 'layout-only -view removal' optimization for this view!

    androidaccessibilityComponentType AccessibilityComponentType #

    Indicates to accessibility services to treat UI component like a -native one. Works for Android only.

    androidaccessibilityLiveRegion enum('none', 'polite', 'assertive') #

    Indicates to accessibility services whether the user should be notified +Only supported on Android 5.0+, has no effect on earlier versions.

    testID string #

    Used to locate this view in end-to-end tests.

    This disables the 'layout-only view removal' optimization for this view!

    androidaccessibilityComponentType AccessibilityComponentType #

    Indicates to accessibility services to treat UI component like a +native one. Works for Android only.

    Possible values are one of:

    • 'none'
    • 'button'
    • 'radiobutton_checked'
    • 'radiobutton_unchecked'

    androidaccessibilityLiveRegion enum('none', 'polite', 'assertive') #

    Indicates to accessibility services whether the user should be notified when this view changes. Works for Android API >= 19 only. -See http://developer.android.com/reference/android/view/View.html#attr_android:accessibilityLiveRegion -for references.

    androidcollapsable bool #

    Views that are only used to layout their children or otherwise don't draw +Possible values:

    • 'none' - Accessibility services should not announce changes to this view.
    • 'polite'- Accessibility services should announce changes to this view.
    • 'assertive' - Accessibility services should interrupt ongoing speech to immediately announce changes to this view.

    See the Android View docs +for reference.

    androidcollapsable bool #

    Views that are only used to layout their children or otherwise don't draw anything may be automatically removed from the native hierarchy as an optimization. Set this property to false to disable this optimization and -ensure that this View exists in the native view hierarchy.

    androidimportantForAccessibility enum('auto', 'yes', 'no', 'no-hide-descendants') #

    Controls how view is important for accessibility which is if it +ensure that this View exists in the native view hierarchy.

    androidimportantForAccessibility enum('auto', 'yes', 'no', 'no-hide-descendants') #

    Controls how view is important for accessibility which is if it fires accessibility events and if it is reported to accessibility services -that query the screen. Works for Android only. -See http://developer.android.com/reference/android/R.attr.html#importantForAccessibility -for references. -Possible values: -'auto' - The system determines whether the view is important for accessibility - - default (recommended). -'yes' - The view is important for accessibility. -'no' - The view is not important for accessibility. -'no-hide-descendants' - The view is not important for accessibility, - nor are any of its descendant views.

    androidneedsOffscreenAlphaCompositing bool #

    Whether this view needs to rendered offscreen and composited with an alpha +that query the screen. Works for Android only.

    Possible values:

    • 'auto' - The system determines whether the view is important for accessibility - +default (recommended).
    • 'yes' - The view is important for accessibility.
    • 'no' - The view is not important for accessibility.
    • 'no-hide-descendants' - The view is not important for accessibility, +nor are any of its descendant views.

    See the Android importantForAccessibility docs +for reference.

    androidneedsOffscreenAlphaCompositing bool #

    Whether this View needs to rendered offscreen and composited with an alpha in order to preserve 100% correct colors and blending behavior. The default -(false) falls back to drawing the component and its children with an alpha +(false) falls back to drawing the component and its children with an alpha applied to the paint used to draw each element instead of rendering the full component offscreen and compositing it back with an alpha value. This default -may be noticeable and undesired in the case where the View you are setting +may be noticeable and undesired in the case where the View you are setting an opacity on has multiple overlapping elements (e.g. multiple overlapping -Views, or text and a background).

    Rendering offscreen to preserve correct alpha behavior is extremely +Views, or text and a background).

    Rendering offscreen to preserve correct alpha behavior is extremely expensive and hard to debug for non-native developers, which is why it is not turned on by default. If you do need to enable this property for an animation, consider combining it with renderToHardwareTextureAndroid if the view contents are static (i.e. it doesn't need to be redrawn each frame). If that property is enabled, this View will be rendered off-screen once, saved in a hardware texture, and then composited onto the screen with an alpha -each frame without having to switch rendering targets on the GPU.

    androidrenderToHardwareTextureAndroid bool #

    Whether this view should render itself (and all of its children) into a +each frame without having to switch rendering targets on the GPU.

    androidrenderToHardwareTextureAndroid bool #

    Whether this View should render itself (and all of its children) into a single hardware texture on the GPU.

    On Android, this is useful for animations and interactions that only modify opacity, rotation, translation, and/or scale: in those cases, the view doesn't have to be redrawn and display lists don't need to be @@ -89,12 +106,13 @@ re-executed. The texture can just be re-used and re-composited with different parameters. The downside is that this can use up limited video memory, so this prop should be set back to false at the end of the interaction/animation.

    iosaccessibilityTraits AccessibilityTraits, [object Object] #

    Provides additional traits to screen reader. By default no traits are -provided unless specified otherwise in element

    iosshouldRasterizeIOS bool #

    Whether this view should be rendered as a bitmap before compositing.

    On iOS, this is useful for animations and interactions that do not +provided unless specified otherwise in element.

    You can provide one trait or an array of many traits.

    Possible values for AccessibilityTraits are:

    • 'none' - The element has no traits.
    • 'button' - The element should be treated as a button.
    • 'link' - The element should be treated as a link.
    • 'header' - The element is a header that divides content into sections.
    • 'search' - The element should be treated as a search field.
    • 'image' - The element should be treated as an image.
    • 'selected' - The element is selected.
    • 'plays' - The element plays sound.
    • 'key' - The element should be treated like a keyboard key.
    • 'text' - The element should be treated as text.
    • 'summary' - The element provides app summary information.
    • 'disabled' - The element is disabled.
    • 'frequentUpdates' - The element frequently changes its value.
    • 'startsMedia' - The element starts a media session.
    • 'adjustable' - The element allows adjustment over a range of values.
    • 'allowsDirectInteraction' - The element allows direct touch interaction for VoiceOver users.
    • 'pageTurn' - Informs VoiceOver that it should scroll to the next page when it finishes reading the contents of the element.

    See the Accessibility guide +for more information.

    iosshouldRasterizeIOS bool #

    Whether this View should be rendered as a bitmap before compositing.

    On iOS, this is useful for animations and interactions that do not modify this component's dimensions nor its children; for example, when translating the position of a static view, rasterization allows the renderer to reuse a cached bitmap of a static view and quickly composite it during each frame.

    Rasterization incurs an off-screen drawing pass and the bitmap consumes -memory. Test and measure when using this property.

    Examples #

    Edit on GitHub
    'use strict'; +memory. Test and measure when using this property.

    Examples #

    Edit on GitHub
    'use strict'; var Platform = require('Platform'); var React = require('react'); @@ -111,7 +129,13 @@ memory. Test and measure when using this property.

    : '#527FE4', borderColor: '#000033', borderWidth: 1, - } + }, + zIndex: { + justifyContent: 'space-around', + width: 100, + height: 50, + marginTop: -10, + }, }); var ViewBorderStyleExample = React.createClass({ @@ -155,6 +179,53 @@ memory. Test and measure when using this property.

    } }); +var ZIndexExample = React.createClass({ + getInitialState() { + return { + flipped: false + }; + }, + + render() { + const indices = this.state.flipped ? [-1, 0, 1, 2] : [2, 1, 0, -1]; + return ( + <TouchableWithoutFeedback onPress={this._handlePress}> + <View> + <Text style={{paddingBottom: 10}}>Tap to flip sorting order</Text> + <View style={[ + styles.zIndex, + {marginTop: 0, backgroundColor: '#E57373', zIndex: indices[0]} + ]}> + <Text>ZIndex {indices[0]}</Text> + </View> + <View style={[ + styles.zIndex, + {marginLeft: 50, backgroundColor: '#FFF176', zIndex: indices[1]} + ]}> + <Text>ZIndex {indices[1]}</Text> + </View> + <View style={[ + styles.zIndex, + {marginLeft: 100, backgroundColor: '#81C784', zIndex: indices[2]} + ]}> + <Text>ZIndex {indices[2]}</Text> + </View> + <View style={[ + styles.zIndex, + {marginLeft: 150, backgroundColor: '#64B5F6', zIndex: indices[3]} + ]}> + <Text>ZIndex {indices[3]}</Text> + </View> + </View> + </TouchableWithoutFeedback> + ); + }, + + _handlePress() { + this.setState({flipped: !this.state.flipped}); + } +}); + exports.title = '<View>'; exports.description = 'Basic building block of all UI, examples that ' + 'demonstrate some of the many styles available.'; @@ -269,8 +340,13 @@ exports.examples /View> ); }, + }, { + title: 'ZIndex', + render: function() { + return <ZIndexExample />; + }, }, -];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/viewpagerandroid.html b/docs/viewpagerandroid.html index dfbad366fae..91a130214bc 100644 --- a/docs/viewpagerandroid.html +++ b/docs/viewpagerandroid.html @@ -1,4 +1,4 @@ -ViewPagerAndroid – React Native | A framework for building native apps using React

    ViewPagerAndroid #

    Edit on GitHub

    Container that allows to flip left and right between child views. Each +ViewPagerAndroid – React Native | A framework for building native apps using React

    ViewPagerAndroid #

    Edit on GitHub

    Container that allows to flip left and right between child views. Each child view of the ViewPagerAndroid will be treated as a separate page and will be stretched to fill the ViewPagerAndroid.

    It is important all children are <View>s and not composite components. You can set style properties like padding or backgroundColor for each @@ -44,9 +44,9 @@ The page scrolling state can be in 3 states: callback will have following fields: - position - index of page that has been selected

    pageMargin number #

    Blank space to show between pages. This is only visible while scrolling, pages are still edge-to-edge.

    scrollEnabled bool #

    When false, the content does not scroll. -The default value is true.

    Methods #

    setPage(selectedPage: number) #

    A helper function to scroll to a specific page in the ViewPager. -The transition between pages will be animated.

    setPageWithoutAnimation(selectedPage: number) #

    A helper function to scroll to a specific page in the ViewPager. -The transition between pages will not be animated.

    Examples #

    Edit on GitHub
    'use strict'; +The default value is true.

    Methods #

    setPage(selectedPage) #

    A helper function to scroll to a specific page in the ViewPager. +The transition between pages will be animated.

    setPageWithoutAnimation(selectedPage) #

    A helper function to scroll to a specific page in the ViewPager. +The transition between pages will not be animated.

    Type Definitions #

    ViewPagerScrollState #

    Type:
    $Enum

    Constants:
    ValueDescription
    idle
    dragging
    settling

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -305,7 +305,7 @@ import type { ViewPagerScrollState }, }); -module.exports = ViewPagerAndroidExample;
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/docs/webview.html b/docs/webview.html index d58aca2272a..57091b20084 100644 --- a/docs/webview.html +++ b/docs/webview.html @@ -1,17 +1,38 @@ -WebView – React Native | A framework for building native apps using React

    WebView #

    Edit on GitHub

    Renders a native WebView.

    Props #

    automaticallyAdjustContentInsets bool #

    contentInset {top: number, left: number, bottom: number, right: number} #

    html string #

    Deprecated

    Use the source prop instead.

    injectedJavaScript string #

    Sets the JS to be injected when the webpage loads.

    mediaPlaybackRequiresUserAction bool #

    Determines whether HTML5 audio & videos require the user to tap before they can -start playing. The default value is false.

    onError function #

    Invoked when load fails

    onLoad function #

    Invoked when load finish

    onLoadEnd function #

    Invoked when load either succeeds or fails

    onLoadStart function #

    Invoked on load start

    onNavigationStateChange function #

    renderError function #

    Function that returns a view to show if there's an error.

    renderLoading function #

    Function that returns a loading indicator.

    scalesPageToFit bool #

    Sets whether the webpage scales to fit the view and the user can change the scale.

    source {uri: string, method: string, headers: object, body: string}, {html: string, baseUrl: string}, number #

    Loads static html or a uri (with optional headers) in the WebView.

    startInLoadingState bool #

    url string #

    Deprecated

    Use the source prop instead.

    androiddomStorageEnabled bool #

    Used on Android only, controls whether DOM Storage is enabled or not

    androidjavaScriptEnabled bool #

    Used on Android only, JS is enabled by default for WebView on iOS

    iosallowsInlineMediaPlayback bool #

    Determines whether HTML5 videos play inline or use the native full-screen -controller. -default value false -NOTE : "In order for video to play inline, not only does this -property need to be set to true, but the video element in the HTML -document must also include the webkit-playsinline attribute."

    iosbounces bool #

    iosdecelerationRate ScrollView.propTypes.decelerationRate #

    A floating-point number that determines how quickly the scroll view -decelerates after the user lifts their finger. You may also use string -shortcuts "normal" and "fast" which match the underlying iOS settings -for UIScrollViewDecelerationRateNormal and -UIScrollViewDecelerationRateFast respectively. - - normal: 0.998 - - fast: 0.99 (the default for iOS WebView)

    iosonShouldStartLoadWithRequest function #

    Allows custom handling of any webview requests by a JS handler. Return true -or false from this method to continue loading the request.

    iosscrollEnabled bool #

    Methods #

    goForward() #

    Go forward one page in the webview's history.

    goBack() #

    Go back one page in the webview's history.

    reload() #

    Reloads the current page.

    stopLoading() #

    getWebViewHandle(): any #

    Returns the native webview node.

    Examples #

    Edit on GitHub
    'use strict'; +WebView – React Native | A framework for building native apps using React

    WebView #

    Edit on GitHub

    WebView renders web content in a native view.

    import React, { Component } from 'react'; +import { WebView } from 'react-native'; + +class MyWeb extends Component { + render() { + return ( + <WebView + source={{uri: 'https://github.com/facebook/react-native'}} + style={{marginTop: 20}} + /> + ); + } +}

    You can use this component to navigate back and forth in the web view's +history and configure various properties for the web content.

    Props #

    automaticallyAdjustContentInsets bool #

    Controls whether to adjust the content inset for web views that are +placed behind a navigation bar, tab bar, or toolbar. The default value +is true.

    contentInset {top: number, left: number, bottom: number, right: number} #

    The amount by which the web view content is inset from the edges of +the scroll view. Defaults to {top: 0, left: 0, bottom: 0, right: 0}.

    html string #

    Deprecated

    Use the source prop instead.

    injectedJavaScript string #

    Set this to provide JavaScript that will be injected into the web page +when the view loads.

    mediaPlaybackRequiresUserAction bool #

    Boolean that determines whether HTML5 audio and video requires the user +to tap them before they start playing. The default value is false.

    onError function #

    Function that is invoked when the WebView load fails.

    onLoad function #

    Function that is invoked when the WebView has finished loading.

    onLoadEnd function #

    Function that is invoked when the WebView load succeeds or fails.

    onLoadStart function #

    Function that is invoked when the WebView starts loading.

    onNavigationStateChange function #

    Function that is invoked when the WebView loading starts or ends.

    renderError function #

    Function that returns a view to show if there's an error.

    renderLoading function #

    Function that returns a loading indicator.

    scalesPageToFit bool #

    Boolean that controls whether the web content is scaled to fit +the view and enables the user to change the scale. The default value +is true.

    source {uri: string, method: string, headers: object, body: string}, {html: string, baseUrl: string}, number #

    Loads static html or a uri (with optional headers) in the WebView.

    startInLoadingState bool #

    Boolean value that forces the WebView to show the loading view +on the first load.

    style View#style #

    The style to apply to the WebView.

    url string #

    Deprecated

    Use the source prop instead.

    androiddomStorageEnabled bool #

    Boolean value to control whether DOM Storage is enabled. Used only in +Android.

    androidjavaScriptEnabled bool #

    Boolean value to enable JavaScript in the WebView. Used on Android only +as JavaScript is enabled by default on iOS. The default value is true.

    androiduserAgent string #

    Sets the user-agent for the WebView.

    iosallowsInlineMediaPlayback bool #

    Boolean that determines whether HTML5 videos play inline or use the +native full-screen controller. The default value is false.

    NOTE : In order for video to play inline, not only does this +property need to be set to true, but the video element in the HTML +document must also include the webkit-playsinline attribute.

    iosbounces bool #

    Boolean value that determines whether the web view bounces +when it reaches the edge of the content. The default value is true.

    iosdecelerationRate ScrollView.propTypes.decelerationRate #

    A floating-point number that determines how quickly the scroll view +decelerates after the user lifts their finger. You may also use the +string shortcuts "normal" and "fast" which match the underlying iOS +settings for UIScrollViewDecelerationRateNormal and +UIScrollViewDecelerationRateFast respectively:

    • normal: 0.998
    • fast: 0.99 (the default for iOS web view)

    iosonShouldStartLoadWithRequest function #

    Function that allows custom handling of any web view requests. Return +true from the function to continue loading the request and false +to stop loading.

    iosscrollEnabled bool #

    Boolean value that determines whether scrolling is enabled in the +WebView. The default value is true.

    Methods #

    goForward(0) #

    Go forward one page in the web view's history.

    goBack(0) #

    Go back one page in the web view's history.

    reload(0) #

    Reloads the current page.

    stopLoading(0) #

    Stop loading the current page.

    getWebViewHandle(0): #

    Returns the native WebView node.

    Examples #

    Edit on GitHub
    'use strict'; var React = require('react'); var ReactNative = require('react-native'); @@ -389,7 +410,7 @@ exports.examples ); } } -];
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/img/AndroidDevServerDialog.png b/img/AndroidDevServerDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd5536acdff399814fcdea1dcabbe89225cec26 GIT binary patch literal 142925 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

    nAzM6i{MRBL05 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

    ;JO<7jMTWCW5a4g|!JTFgcPm5pigU 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 yg(w2u-^h- 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%0Dj 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%0A^nFy;8Xq4|w|7fO!i^E;q8MD@4jVG2 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 literal 0 HcmV?d00001 diff --git a/img/AndroidDeveloperMenu.png b/img/AndroidDeveloperMenu.png new file mode 100644 index 0000000000000000000000000000000000000000..2fae4ccaa236090e8cc40a14ffd8285ba9e1ac18 GIT binary patch literal 82306 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 literal 0 HcmV?d00001 diff --git a/img/DeveloperMenu.png b/img/DeveloperMenu.png new file mode 100644 index 0000000000000000000000000000000000000000..bb295444ee1a3c6b0e958efaa664fb6463e7778c GIT binary patch literal 49640 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%0D*f7+2jH_deZmi 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 literal 0 HcmV?d00001 diff --git a/img/NavigationStack-Navigator.gif b/img/NavigationStack-Navigator.gif new file mode 100644 index 0000000000000000000000000000000000000000..c1f8313996c71a94fc3969d9d8c38c2f848a8663 GIT binary patch literal 154381 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

    N5)E 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ΜI|n# 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

    %X4m7XDcn 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 literal 0 HcmV?d00001 diff --git a/img/NavigationStack-NavigatorIOS.gif b/img/NavigationStack-NavigatorIOS.gif new file mode 100644 index 0000000000000000000000000000000000000000..c1d56a1f555fde14bec9d08e12b24897b47dab8d GIT binary patch literal 64885 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 Bk$eCE literal 0 HcmV?d00001 diff --git a/img/react-native-add-react-native-integration-example-high-scores.png b/img/react-native-add-react-native-integration-example-high-scores.png new file mode 100644 index 0000000000000000000000000000000000000000..6d07707ba8686a7b0731b2f18540e9b3ca9074fd GIT binary patch literal 7420 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 literal 0 HcmV?d00001 diff --git a/img/react-native-add-react-native-integration-example-home-screen.png b/img/react-native-add-react-native-integration-example-home-screen.png new file mode 100644 index 0000000000000000000000000000000000000000..2b1b8b28735a4c01b67716ca9b826e51341c0b9f GIT binary patch literal 6610 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 literal 0 HcmV?d00001 diff --git a/img/react-native-add-react-native-integration-link.png b/img/react-native-add-react-native-integration-link.png new file mode 100644 index 0000000000000000000000000000000000000000..3d89eaf020ac13fa33e822a96c932dbd11a39c65 GIT binary patch literal 22551 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 R`uyT26-5n&qK8jk{SQqF!|(tA literal 0 HcmV?d00001 diff --git a/img/react-native-add-react-native-integration-wire-up.png b/img/react-native-add-react-native-integration-wire-up.png new file mode 100644 index 0000000000000000000000000000000000000000..43d2add57ba54053b7cee84fdc85a3ea0c5c2716 GIT binary patch literal 118362 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 YT_B8AlYAux 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%0DvXU{A47^Yf0f$u-6#@4MTtQVta z&s^uaPWx}br`{m?y@I28+0AzWR{eBM`1Cj{a)@RRrUc7b0o#>!oa9WM&8Ab=DxY$P zjX>PJpWJ{w{B~FtKTJUNC@t)6=@*DnO`l@^#+Cv5r)54-{s9y66vN@(YYz&OPb~x* z0+d-(4xFjG}KcOF^a=3M7S*EJq*MJ&pM1_FlY8sX$9|d7 zu0&dG9rwE35Ih~NUCNgHuTUo!0X$ub(mMohau-eF+sU^XZq-B43v4>z!tMA~1-y%< zLiB5B*~8>y)8JgPCp}>XJyEHh+kn?<;`;bBo=DRLv!L`;2{!O-{Sf~))CsDn#>ez9wxa}g(eF022h2c-{&PJP;_1jRaJk7ULsh^7#t^NMu&dLLK}xQgJOrk z_puKXR8T;BHYj0W_)&;Qe!8uK!<_^JLrRtud8;gtbXbGF8szKiD=#nay|ADuox#6s zv;LzF5UB(n-gAvZ4d3WO^7*a!c^4p2%@&!uX=wj6fyi%fO`P2F^vRGHfxU&^xPmie zF^Fz7>lxjOt+EpLt6Q_Wrz1bn)f)oqPSLciv9^&X_(^WjiO$Z=bzd5FX3kD!GaP=Emnq$f_=(oIlRgV-nZa)!@JFvXSq7n)kI8X}=T)K0Y`5_n6;P0X^)>sb$ zrOZm}*k=~ssTo$%8^S=ydIf(Q+s0kvSbAX&dKn87zWLb*fw%%r8dQrU#oCYW9&p$% z={)qZJs4JEwCi?v?X!9a2^WqY#P*zy2!G|ACUwARRgmltDDaKQwjYE*Tfi}JUDA!K zqPbF1%y>ob%R;>{@3Y?c+oYrxEdyOSk!d6H>|qKcvJfJ zl|5*=t*4NcH*_^F6rZ0>JapVsCW{YElEBJq$yv!V2FBOhwp$mag%5+dyt6~q&Avu9C$NV>+_jtrxAnm@_F%; z!)jk~n$%r3cxqR~H<)s$<{zFiqrbFaex6L|FYLhTh$zN}XR^Qxeqq=r8HKcBba#!& z-WG_gR2Xym%D|v&C9e@XHx$v59D*tx7WZntikF?9{(&MsOJvxmRSjyuU|vz2P*yaZ z!oJHiM^dBUw3};~r*MNZJj2ix3a+KX9Mqj4U%iPu zHuhB`E7jS3FTk2I#v&{%^bE|UIoPj;BcvKDuzSsRu+_@m5k-KN)lY$GyJc3$pxdbr zCx%MC>JoLM4%_f7rqL58FH2QYs6A&4|M}$zQe*691_6$LV&jp8767=>vW0lGMR?=QK#`^Km$dcS!A?xo}TVukRAicqPXJZ5Fqwu2yM z^U>hKeffmja{r3dZqT0l?MAD7tAd5^X?|+e#aw(yrYtIRSAKhN=Z$`Tf|MJSGz1!R zC!`pvZupxhk5M>WE(W5X97u_Y@1Ta4)8TNb2BjhLFY1LFuLGxoxd)A2ZuHA$QZet)3n?RX)t17{v%>k`?h-0C{v?L#4C)Mtz zn9cQzBz54368nR?Z0EVeD; zCF9lNMPok4D?+(yRN&L=o;t;M>&%`aW=$aCzCVBIl zTB8(vBZ8rBCpyyt-a3p$c+qIK9_8TuhSN9p?<@mav@XLN@6;2`^|75>bG}5nCriCP zm$xEKOR<#L5yN1n(r$j9%zqypf!_V8$L97RT zVb~a2WO5a4*4H6A48GoQlw`-vHa|;pV<6cH8AYrn@g>)5kx~F?c6(sNQ}~81k-I}Z z5V44udHdo46&BZ(6T69T(K&dAH9#aWih|aK0b6v{$T@`>d?Stljwcp-6hAA#J|8BM z=L`Ju9u@o5p7#CiSAuc10ajz2aO^??@mJ<(#_v+2j-B)tI(bbW)LXBDFvD|e=Tir0 z!zJ22q1(X#nN++N+&XsKav4cgST$k9HzOBgQ;H^!%FLBRynmg}y*RWE{6`=RVo*J^7{t3Z@K{j|SDVXd=mDEm zVsOLU&n9We=Vt16#CaC^rF@uzlg@{@?SUlaxSN*csqa7^wPY8E?F}Ksv}=NkcLj|Q zUCjde<)_iWF}(9$&bX0;{P3*v;-F$$FlfiACiCz|U909-wYo)mh=V6b(qXjy&I#{? z-sdIp_Nl|u&lcKxspo4_=w_=#OJ4Y-)m<3Dm-v=)M}h6$a#9~1*;uOpWw_WB4Eq>7 zx3*WGAK<1r(tGj}o~Dx+n_%!_*ea8{UBtU%cVgI}Xvq0zD{(SJt`F5e7`;c=WI4g0 zaxdhzCCW(hM?ct|%wVtFZVutq({Tuis6H-Arz(F<#|xiEqbvbm_KHknWe)!H{x_ne zFCkKw^P$cAQMT1%an~-SdFk!=_^T^~VQX_^p=m{BQ%*&o4u%84G@${e=LNsMSxO2O5zxV%CDX9DV`%2>>Y(!jU zF#GM{uV4LMw6HG~D&$1R#RcT&Q$07REs#yyR}`?I09H}9tUU{dpbi*|r#O7w02KUY99B_e8mQZ#!O7$n_DI?_DJ{)5h!}``fXwAIcH%^!G|r zK`Cb#M*ExkQAWAg8YQT9Fve{xf*5bjkrgsJTf_zlP11es^Lu`{NaZ zU0NrG{cs_X)HOHvQmE6D(r^iJm9TuIMi3#O7NZZDS@%-ZAefxoAZQbg~4VUfVMs`f9cFS|x6#K{i znh6G~Kbo2@vM&2Z>`wtZo5u+3@_KMs`12elc=3lYHx@m4u#7zJ@2ME#!kTl zPEWsHxigGj@zg|Uo)pO*Z)v%^vJCtO~B0_3IWadB~pd~TeYnwm@P!VbpO!1%#i z>@-CH<97kEyXJ-kv7aAH68>xao>pOTSH2*m;-V;QyUIBn%`Y7E)IFR|S5%rm)FXL# zb?z!7Va#%$IOTsBkz|F5OoUiV)e}-n<5}%Dyb#-lE+vP;_6F zafF&lp~{?WedELxrThx(e{VX%e~>yb%I_i|H*;K&l*GYiY0`e@Jh~#VJ&`T){`7)w zJE|{+{{}{YBo9#zb{Yk|paQWzDT_~bk4~)|MErT=@o9bCVEhRI9{%I~wQZ?-l@Lm# z$IO@n-RwKy)zZ?Nop8;b8UNfG*IChtd{{V22$dRtof%*<=Au1wJT<^iae$ibs?NdW z-VC`xUDnOxm@CwRLQ$gp#Up`r0o_qoyP(=J<;_QrmSyRh4>hIBz2?PzTd7uuv%`j3 zWdZtZRhA=su(ltaDNmTLPg+bUQZ9-W;}0ZWLHT>5qCyA>!m_`CxOc}OBn&qmivPN0 zXAUzzKhF)w`k$Q{_xJABIjkPHmv5b&xq&dWS_W$BXSwsmm!dM$ET;Brp*uM#sVRNy zr;vz3kKi{c#O1)LWwYP8U$ff;IOzHLD)}bTYNP81~K@sBOt5L^#+vM|I zgEu`#E=DEa=w2bRR5@jxp!oSn3AW7OoPJGtQ%O~G`0!R`aK?hVC+XLKz=D&FE5jy^ zu>j%>F=b^;z@=43s<48)OCrt2#s>I`0;CeAg+uO&%S_48^b*Z5;EiFVF`6|dzlq6# z_J+P#o0vr@Es#Jbig|S@zhKg(d0P^XH8yPyZy3W54^Bq}9Eg+w#IbkPc8MT21^A45k!SnMcz>4FXya z%KtUl%+d6uEq>tOfagD|OGyDQ75EN+eU8~6lr&jD@7J+Qpl{;0^Y;7e>M*d4FlmbV zFtDlM50RhB2GBm9?o5bv$VHj1S2 z7`0;Mp%RnFEi;>eZi%SQ<}*xia~7HCn~!A8P9 z{txUS|2#p$&>ABHjPzw$T--lV{@1IRrTc(2?ECnYHv~%2*reT-h3sYx9d0-58WI!j zi=zJCGPw%NU=?Y>xJSx85|aO{&|=J8vl1BC5lGW?%}xV1IV}$2(ZS-rT5`(c}{BOyOMAFwzE1JOkA^VqgI( zX8!jDm}R^%;bDIH8U43dJM1@kAqg(zdxYG6-*vnR!8ABW_LmsCYbcgeTp%L0MnjgD z#BY}O$L+7PJS6d!B~!e6uR9tLL}0zIKhmGiHV=Px>~>> z)oxn#VqUdZO7s?}8qYw8EHW0Kce_-5~CaS5aSscPd0*MiCj$R6e8kDdOb0~a!v6kUWRBpP2EVLXLL|c8DpjKrYCmh$g>94n<0&ih9misaq-=Fm*uh81ZCuTS<}wLw;^)wgl{!fKCn6AzTg-NFG$ajr2V<0ebA|dec}i$ zM?VPld2reNKv?QYd=0z_vqVGp(CpqBUw~lHJ>6SenX2b7q3HQ&I%sCe^#*~-&`NoM zBM55nWIOuc!z%jCQ#1d3>Zz=B$cSGP6$8TvCk#0BRYzZBTF~!Zhv|g7eb9qTxK4;@ z)QEw4TY)I7ugH5@q|o-@HKD0(&9qiN(={tUty%bbouiOO^=5i$aocEMmC6@O11esw zMW~!frLf*I(howg2^}_4@6mp~h9Dni0;?$|@TEKKiBCvKps_BJa&HGhq4h*2;H5eG z(NwYcKpQqe{gZ05EQkZ0>479~Eb!C>p>CtmAmRM?q?`X>&2k^Q zFp6tyyy81CtSSk@vSlF+_?K|c=tO&nJ+R`#yVY`YS z&pGdY;ap0aR#O-tZ0>Wzyu-by*E)1wwkZ<4Y|rfU1)B_|>2BbQ&V`K4TwW)?slp2} z_X}+X8c1T6`|i%2$W=9t9H_y)OB7zOi_QeTjMB8qr=BOr(R?n?W9hBe-@Xg-AFVX; zTRS#vXmVhExjwI(%0&W5{CKreY_TX&)>)v?+WLmKX{x6r@&z zB0tBG$=CZ_p(3`a>ze0@CI7mjPg%!CW9f90r1WoR=%L)BCr>azz`|SB@PIN>fpFIN zOhJrP4@V!2;wk1>x^eGu+Fn`~%6j@B3tTlAss>cxLNKU79)S0LJbOUib2Ad1dNUFx z>@;gZ0Y=(vBk~X>A*hCuuR5iJ=zc9a&r+lf<8W=!mFR5wnabVc7Q#yLo}LNgR}|qf zF$XPYjixnRAD|}Yty&kv8yVN)By89s40{B7I*vbjV~ROZ>9y^>Zwn`RXQ}bVc_=%M zzr7$^j#!IYh?ecnl4vDtJ{EoafK+zK^XEg@lm6EHXLni_u1$vRPr57Iqpm3^!jhJ$ zMqvF#^?zKi2UU2xVw~I2`BIoITJhRQ8E;1WWz3KG)^s&0tdGWV1!v_KNfwohdvjfvGVu2=ZE6HJy8{Ln{i3Z7n=_KW<;ou{XtBh&fo(kUB zx+Wg1cRFkl6;@aqp{*YAx1L33?S5qA5+QXU&mpyZg(-+MEjnp=9iC-&7X|RXsCsI! zy9i7HGfImbQ#%ukMvp0G1~Aesbo?KbrtBawnXy01Op)*;fsvJFeKsgSm69aQjab{@4GCljSMQPsti@HLROpoyJJ!d<#)N8U4g_D#9tnf!Bu2t}B%q{8_$=q#g4k$nCdj;zN5z-z0#@GB{HERT`d z%$gMXlGT*2yjc#imIuv)_Qvigx^Jev%=+~@>91ZIKR2UOQqx*er4P02vC2}c-RrVX z^ZR+lf&5YqCI?DURaG@BXQJAg5e%NNT3&`c$#ARrk-PKI*QzI0)W@{PS^R8d=(k!* z1v=+^ba9m1{he`KXr(~#`B!`xlwgb{l!Opi+`W3k5g!GwL>|{=#tW%-a!H@W61W7P z$R|visUsrs%2jqSVYK|H`B=l!gq83;5|!{_%wuBb^Hn`Zz7iIEti)4}h>rXUpW@AC z5=rhqa2Bj)*i>#7cwXU!DT&O)juGTfjH#=yI2|~c&}dNhu>1@&B)dMXV^(+ECI`yZ z)t_iC+kYH+seD|v#?ohe<>ZR`-K8HbEo6stN|@$Bf&pVGf%22?I6D%=-_pM!7HE6K zfnY33vmv)gBEFZ1ARoD@yaOJ3M!hcwS1&enE{^!m-4PTqNYRjVhcTI&-{1c=^aL&lFTqcR7%!jwTsijEz{TZzmn9dJqS(JS7bm0@KG0 zv#g}(mUtDPXG$<(<1VVm9zSJ{?X7yk>&Uz22j2MEpQrpc#(E zV>}yAJ8c|KB=&Naxg5&CI^8wNkb3K7X;H6s`hXoG^v|_>mx0h9ELuJ7RyghF3_7;h z);d4>LpT~HHL;2EQ!TxCa0Ch~RAsI;P#x+8YGL%c`dgLST#X;5FsC zzSVK^th*>%R0zYxtdnH(nAog!8gYHPI0mXB(I_1^`D)rz3qk zldtexlr}3`zN=OyZd)`aZX0fBF+D^+PJL}&Fg_Dt)SIW6rtck{7ul90S;tPw1@D1v*(}DU;u(cFU)!&E(UK{lNTrZuF_JsH(gI5k955=-qZce*eD7O@)n8=@&Y^6yFGBV1S&U-H`|hn zUVe-Jd|rS{Sg*Ox&wqBGsM!D}4a|tNeR#e?)I)^+zS}F=Tm1{6&Cc3JO}WnTFVO8uR) z3m`MGHf?<~`y$gqe8dRyUP5_$O} zg9ldUpV)|qXVR|F1N)rY`!v7Lf4~&N9Efn+J8P%=H2+1|(n~-@%nmc{D?j|WUp#CA z&M@ZtLV_covWW64lzgnAXOh#;=*PYBK0RW^G*_X_B;K4;Sfhc6yI1Q@w;U*(w;qJ5 zm7KBnuS~?dm@n(>raMOpepc~*!SdXz*yx?#e3_QoiR(`MD1m$ZG(y5exOy!<+T;M9 zx1vE+L`K!aY-RzEYxGvevJ3R&xE}E(_YrEz5n~(l7gp!Q7e&e6X6By~xU(QPUu_aQ z>g1_YVa4a*UDuFSV}#2WiTFD)L&e*#Y6P}8`%TU#q)I7mD88=ZNWj2 zk)1cQOR=yN4R`%SQUIEKQGS8$I~SyuG94r^(lRS-&$TdgA0jlcuE)csXw%$6 zGM8FD`6~e$j59(j(^9=KLOh4f-m{Ga>VgZYTAwEKES~2f&!CwGzG=}+U#yX#Azrh4 zEJApx;=+!@McL=-2SpG0c(7Hdf7r@nA3XRYbb{lOdrY|XZpQIp>ht$cCJKO8!?t%f zX~U?eVDGGLZHX}QVJVG2fFU#Zkv(iDj<}t8ayLC!Z5P5%BE~J7A8jl08Fej}XL|$$ z%u{NaTq-^0_dL$qqK&UOKUjR-9ls~#Z;2C63K)dtu}yZIH^0YWBgVVsx9pbVxc+n0YsW*xMzn2678cBHu4$G)=5DiUcam)VbjTXvAKy;i2gdYo!&ou;&*l())0 zd1Jz=I@dFn)ZMX5fp6>1cMi+@rJuhZ_Lj@C*Xu}j13>hjFXtOT0_o!fc!z|HjHrY} zP#WUfloZW5J2G{rn3$ON#!V@F?%0Ys(n4NdO++E51WHq7;32i_P*vr?L;5kwoD)Ll zGAjJM4!i2V^}OoZK}#v!(~Rr3P3o>l9ZczSl2zoND4>CW5|s5a$%*CbW+J=$Z67{7HI#5cL__3;Zsam4&B^6 zTU56tIRcY5hR>M1gvE(?WbN3Xk?Yrmy8Gqf>&aDJ2uwzJq zf9l}yaXO*8p{YNh{%@cP%sk~4HD6Z~hs8x3$iV_>`06C>s_6pd?15p|KXs$@LbCy6 zk(S)Va07Z_$oTBrqPx-3eq@;t}jxlFuoDh~=(*MyXSw`gA<8 zjuVEiN3>}h_~+qnZ*&P87mTb<%RitYYtLp0XbavZpOLDcA|5yjylXFg#cO4sf{F9% z9QSz!Sv~!HrKyzoB&Tn!L)0f9u+c@7pa5)%&$*27x$KU=`}wa$qKA=g^&p@jh1m3M z2;_JWbIs_qE^%9VH>N*f_?4R&!EW@4J#Z~7G#10qr6HL?*azvXABSk&&`U&4&)Qp{ zPDRBhBWv?V0lzP%@~}IU)8VCr%+H_r3#RTzhaDIgSbIMP?CCe1cjwzzh704Tk8^r1Y(a#fd(arVW`PEcE+8KU*PdCB>7MnfXl;Z%j%Y*0G(>5{+h(~2MYQ(h-|jDQIR|5(Qdy_dV{#z{q^gs zNk~i^gBBX|53r)hB_6Q6!TjS5v3N3`zc7Y17>EPV+3R}c%@KSl?H zmpG9tEJM5$8W#@_KKwlb2(Vg;PERkjRLTKa2?83LIGE{O1>AddwaC=!6uB8 zs6~2#tXX_?AZF$-DDmgHMNxScY7V_Lj-guaLZ?pbjcq@&QQF**P5yhN`ceo1uZVGT zFhv^H_-l%gon1M$cGo&DBJ;Cn&sN4OX@M1fXiZIx`U5=?AL>Xi(q1g+oakxX)faDX zsERSyzfW{5T}@`WNAxA7!7W@@%IqK?4kB2dOd**C?$E32t-$S!Q~ z!CZ>qsRdhTXsEo>4qgQDr0)!c@q7xs&YM5hJ3JkVo@X4`U!tTlY&R028O-aXT__kX#$*N~4MTP`?&IdHQY~R#lam@Rra! zPlg)gJ43XPSwY5pyn=*)u%oM|5nNvR`I^OxZS7OQ1KleF?jtLC80oJRD8Vwj2NeU+ z{ibzZkCdM;RElZ3^?dH@n3NCZR5i_2c>Wvu_w*ez`oG}5_(wT^;Jzr}WBtG2z8G8^ z_spqpaNk!@`r z*q|}xfYdafV-ob?K;Vfzp65LCs#-?LO=RYn@n8WSH@WS}_1jJLT_pF;*@eNrdMHB% zAW5uR`GH;vA;{IDRO&4YcjOLDA%@6gyNJM~$2`huOklM!f>C_GdVbzI+S!5F3nx9y zU~4s%oP28cya@PEDiX0vHxf_C#<=j~7{pr$wal8^m^kthjeB(&h>tdQS%2)@Ud)6^ z;i|(y6WB?>mXwChSv<#cxj2brc7Lk#(eZe0M*L`2NcrgfcZ0EnB+d-6OB%HV3H22c(U&kgwQP>^gr>+8)egBN9Ji#R3yxFR$!DD=tjuoOj| z8fu7$nZ-Ii*g`q${d=5|ZJE|yU${|hXM7@owFkNsxdf1ySr2$79)UvG4nK)l|=UUB0v}hQ1Pvx_waC4 zyiee|;poNiGLF|49-CPVKk8~Y$8>+DENcB-aIZ;zfL;Un1yq0bvu1LT@7&_#Qyy>$ z+N#AOvFUlJN(@VcZQJ@w^Y4;+F&>`cgMo_iK-ZD(j-xx7d8zJG)`dN5N)9PvB!@H< z!6umR>@JB&PYc?GBb#eW3ag6GN>1xU-9LXceUS;9akG-$+sxz&($aijp_Pg&wqNEM z3gaJ!#q+!wh;|TXH01NozTEch^UlqC?qljZx1atglgAAgCI&gO`Hgz5t#f)2Y$m6J z!mBTnLdWZ#FLQDl!h+2j96T?tuuj@hFda#D4w8{~8-4mdc>OTp_58Z17y4>Jm2Kb4 zLSO_&DCE;1^0o-2@`AOgtz;fGA8LR=`j7e&1~2sd$f`9nlzEk(2hWZ-%tV!?aJAJG z`hy4lU?|&*bK=64G0^6FUrkMo)ANkABa&Fhz~x_{%2mTRw~~N#INXQCy*{>@uYQa{ z;zaLkFSo`fM6j~$-+|jE*{ZtkkY~FS0GDvXb$#kbrJxncjDa#Zkx|wcsl#+US;MJ7 ze`~!OBv)115~3pO0*6a(Lq_BK`Un1ch~UyEQOSNP$cy1=vn)P_j8;hmCRPK(?gRd5 zKAW&B%bEpQ@;I0H!o-CLLS{vJQ>6Bg_^R1u!q6Sfc_!W@!T^DWy1N2qm-HbpB~LXf z52&}QV1MM{30TvG2^Kb}Fz=Pj6f_z&!1QR)T6d;w>bNP)Po|8fcTmX|yxpO>z50~&&K)f6H9c~N4CY%{F(4R5h(6Jb| zSssT9bU+;9rb4%$I(4*v+uiAHQ5L06p6xFo!^sn0QPLxvQK374(|^mSOMIO@0Gq)E zUt9&ZAym5vk0ah-x$M7Vxn`BmwpQG+7mytVibCN~%saxVPil}?-n~B`vOD(4sJfen z$J9N=qHBVsZ$C-KP*#<7p4U-q+>j^ZS!^5sXz!a=g1{r#TAtyeR2v9;8icSh?C zqgDhIlS42QnJux{qzO)hhZwtgBiH zs;PNboxnmrtUjX-k?2Sc4VVq#7Nt2IeMHx=etxoE5UuLaOFEi$G;->)57ThHABcYV zns$`M88>bv+^g|&8BdsZs{nyXQ~Y(=C3B*}3s*zx^lp1DS(R*t*jTBb+X)@!Pza*= z$^l>#581}D#L?7V0k2To_i{}cV#H+mbReQcAs&e@DQ*+mD>?`|a;}UE8@zUiqKBj< z0*{b2Lbu1$?QBCH&)6V+`Z8*Ah)6!4ZrJ||q`QW@$}TyHyEgr3lxF<_lk}&+j#e0$ zcG@IpEVu0iGXeo+@?mNTWHEy|{_!715A%8j*|y+bZ+-GQGI}?e zcSaMJzZ_Eie4y6e2eTizyc3_2=m#0Lv3@vSJg!^VmLOnnZv@uR-a0TSn~AN-*z5Q5 z1bTu8d0z~EWv6L%qQqb185`?x^o(WMG*T=70}8045TwMOa$7HU! zC*vaO11b=TYm8@Fk99F^+=Ols39Bj?l*#kNJmJWu6BFdEP@SwJ26>egPTs>Ix=Fz! z=NEZzUpp1xc=E#`e)iOZ-jb^Nx@{}U*jeZ2d&c^Bo1#H)^xe_3)#5ds697m_|>(k!}RGT!;2L>RvDkMhZd%UW|>jrjPU_q_FKNV-Um`AkYpK^a|dvLV)N8pMLMOk>$?hE*QmdZh2+u5%9STBrUF1 zSoq@&_jFQZ1BLJv23-OxD(k6#X+c=>+9c;@q(tMkfa4(+V~>#1o(4Bj?Mt2|w9Ar+ z=Jbbw@B@)+oS^AxTi`em4tM%az~)v+T3_DO*Hfd<>BbD*rWIj)eQ7!6vQ>KnVhb+zx{QC=^U>pk0#lKS_T9hSKUiGqFTDPgW`sBvGjM{p8Jx>^5HVZ+4Wv9 z67rK5b5+Eu;!KLG)^grKt;_ZE#wF&qs)U6pQ5`U_{ftJ4*m6W>`{$3Jym`ChaKzP5 z(Le@i$cww9wfF%(%rWNBSR(bEtb#)FXi~g5)ALS|ZG}#ez=Xst7x_=kJ9AC+35TOj zk$HO9_?(VhZ!+P>&z4!O$e$ksRkD)@aK}>1r*^e^x(q}h$FBZ+Q7CkfKik3GyH0A9wFXOqokEtmluhMir{ZZ?2 z_~22wMRnkVSo3e06>Bq&Zj&nUCq!uHkFOoS<0x*>bhq-ev-Do>4|7z^$Qq_vD0Rk9 zfeQS$LNE^*=73-zM+U!0re3% zEEseKuP0pWyAHHL5DvklV_KLa9Jz-CzaTxoQ*;5ZQ+BoTUOMBr;;>XtB{E2YSL&HA zfJYr{HIBUG)xKuc@TKodySuVe62D|&%sor#bB!sJmTrAGMNyi<0J_2dk6>wpy+(=?QmTgyA4{aAEdOVtI7b>q zdCwAqv-~_+$F6d@+`63bvjwHNbLx!WaF?|tD1p!@gbItXCwy1|<2_%$cKF_b|A^k& zf)x9Bj+~cQ)4E1#(PXK+!FAtE+2e6D2?X7r!U;&l+N=^Bs^zghG;=B#--1n|KD$jO z$sCEJJCQ{86}i28DaPf-_}_DRtCYojn7b8I7;?STxD2oDGz{(OLdO^@P`+0zS4`1$ zgSf7;SJl>{Stx8Ob(3A(Gz4ndng%`@OP;Z=3dJf%jL=*AItt}=O}d_-S?FFmIAIROT5Cr7s_`@7@(ylZ3i3Txg@B->f-YJ zSiCQd?^~_CG3x7ogO=t2@LPjy{aYjg(;z0Z~VBrCu0 zMsQ3c+#DSXZvN;g^i|on6tf45x1h9^7IZ*F)!V`|SV<-2ZRpYAV^X%?ia=0Z3ksu4 zNJ$mGH8L)dUFkw0~+IX6LST<)}x_@&YIce5$^;}?)0_s1~{9MNy+KC4iye(nG;XD91-9FKU zvtq%}6(zLZDmF?=pepp+k){aFStsIL+F=WTrdHot;puO=AqYUAr3X?`ffVz~2cR&0 zkjrVl1e+p)ev2HgAuthpUogKY(ag`U=ri&{F5vY5XHb|l%`cP{{01uw(BHDYN`5}f z0Cv2xzJfNw3B@egt6PBTyOPiD6zv!4NJ#cP=Er+cTDn~ZWUjx(K0sL`Ap-8 z@?gTpdd9b+n1A5@<|}T%e6Cr121O&@c%3~+^ry-m^z}yGK+2zQf88ALGyhqUtO`5+ z(e!m*9+il=_`0HR*TU0zDI+6_8z~V$!S_O5(8>WFGqOhO3rwKyK9yR(5`{d2)%)uM zmPA0=gPw%X6b)?WC}0P%cqwT7_6>Ud1#N7Yh+KbQ)MzsB{n*&BAmFrt3Pd9o1Ef=x zd?J`9`G}X705}DW$ASBx)_&QoYY3YWe5}xyd}km+iS(otz2t7B!|(pti#N(_pfxcU z*Zl&fM|obT^{7=eUpUE-3+5b{l*UFyq2Ej!{_^FEx(jvbK3N+OhG&?6FX41Q zqMM(eH&gZle}(rfoE4B>Vr~ZSHDuo0VAspH3wJ5wW82Q_`?02p0%`d~Wi04Yl*BH@ zetoh446KsrEHpjN=*?Bb<+QaNoR=bTr`M`nZJ#80EXm-)%XU4p(h`sNE2_Wi9aulX ze->ESkNRDjykY8fRl7I_4^_!0{@2PYW%qv-s1JQ0@1MN|{(PmzO*biytAW<|2M#_y ztv){hT7SxsNj5XQ4+0peO9C`%Rw%10LIsyiTx@LYtbH2Xd^TlfdK=Xn^0&)|6?8e^i(Z32hdg{^oh2}=5IvJ@u5gIODo#E z7Z3w=DrUHZxNYOv-35V;4MfjxBU6Fi#AC1FmB;LKzN)={&bU{$COX}e(p68e{^aN@ zVVM6CYl39hc?29@0-+b-RT>u>nuSN-Lydk;3pXR~rclkIQ$qqL+TGV)8}L1&LG24x zkX@}WLEak%bpJz=o9jFG1Zh7)UvWT**K)gPaq7H!vJACFv6TN6{y4U-`36Ff(>aoY zf%;igUA$J2yKC)=)Q^V5;1mC8wI@Q+$kANOFFdXWxGm^$GZU+6>cX&#L+3(W4KEZr zU*DYyZ6EBM6`!h`rD59*;g>qSK36G9=fXLkB#}SJ(mT_$83Pka7=gTvnphXR0!&k9u? z!2fsK8N<)<01dA9H)(QTw}+T89#dDrz`Mv8BGSgUTD#BcPHG^}y2bYBQfimB^ zAru0;FgXXC8kvPGu|fNye^_31CG& zWRpw}IOxE)Hj&T8RPLq+=R>W_L*pDkUG6tYlqOMt&tq_Vr7zJ!4qD8}3ob+~-`O#5 zKk~w1!GRy9^Z#2ie9%$#?-j%35Y5+-9F+Qdci$jts_rX1Y~hAc*}Ho6eiVLp35OgZ z{J9s7npY%sw7&kDd?{3xS*j(mx>>J%UojojKf?bH26$cF;m z<=?6Eta!4fUhV}>oGbK%`!2 z5>-)gMkupvcODtgqrb=HZQPM{P++@?!_M_f8W_|)*?-og7uMS(O_^jwh>EK0e?L7s zq>l^d1=W&(N>B6Gv2e9AsY8o5LS>Qq@*7a(tPk}1CiPS^ji90*iL+#`)a|U&CNSGZ zGw|4~(U8eCi1xj5)0s+#cbG}Jycebx5x6i!QJ150tWd2_{(+p@S4NKAu3dNet!)j% zJA^*+d#zbTB>83ErUiVDvJL7~_QZdFNpu)UmE}Z#u?B~TsOTJ+L6bJNscb0R_c|jZ zBzx0b(e^I#k(@olTgABp##xEkoes^^c9k`8Y~+e`ZC+pZVKRvUahV&tno zoN2c8PQ(*V+fBeA!l&2BH00iDc;QRuVYM(5CCIkfqLHv<%%*Y^7>7M6DrUI>j zXr;`OAlnN2a775R+v}ce(Q9%DWB(Gu?N>-Hgc6pLa>_S+S{(EFss5eq<4nAQMKbqt z{lldyme$+_Eny#KFt`=@>R<45byR?-D+QKFwX5`>xg)xeuWM@-vwtD?AVTL1ih9-=0NH?R`+be@dsbmxE^-a)1B-jxsfk1eGNC+)B{{Cwy6S4qYD`t`O6Hj2m=p-7#dR*XNqs1#xe=wKi_ZJoI8 z#fs6*W-p(!Wnr}c630amvR*EEF`6~nZ-JLfd+Z-u!{}Q7m8M?$vwqQtqift_Er)d0 zMa3w^w7Nplp6UY99xyL0L}%@@Ao&NG;Elj_o~q8_;t99$oCbvjL)$N%o>_ap31xee zeW)S#v9U)G#DMZ#)JMLr{eoAWLJ6(q;=VR%e|RmBGK8OQNz5cY{MF^VL<4akt|!ni zMmy-S(|i1M#$DJa7)Zjo?&OdF=EEwH?Olw{l5Eo{^0k6(Fs5#fIW&dfru-94dcBP9 z8_YScaSfR%wajICA9p01{A*()CaHG?;Zlvv+_P$P1g4RiVL5q`C)1j&uqrV=(H<7) z*wcre7mmXcbahJ@8}jb!9u2P0)7PiMW^tVl`ktgKz=XMXphwns0VT13q4r7XPW7XA z!lS|`tt}H6d7O}JRVsNCslexU0K^?65CZYDANU>~B5k1H7F0$^U_8-`{0S=R&wWHJU4nE= zg~;Wj>QSy_Q}s|DXscHZssvMwU?zhGotW`E9h_kBYvp~zF!lNQu{!~m^Exgb5LMp7 zv)Nr9DohLx5BS`x3j*zniDfrLO!`#QthVsqwc6NEOe`Ms`XDwQ+pAg1|w2O~PCM$7SZIFOJCde+)M~E!#My$0b1d z(G*o=wA3*BC8c`v-E@j75TjuR|8wP{!^A%NFGzt|91lwTWqHt!TsMZqWV3CYd5`aG zK8wDF(JOqsUPS9w(LIFG*>&|5$24^PvfX)IKPyU!0*j%yEi7PZzC ze@OrXrE6(kbZ6fU_f~Ch$hp2Y?Xqg6o^w3CW~Dfhd{jnqJgEBU2yXy4GjnwBFw*y5TJXxN^=Qeb5Z{{`6#EwUnn7lIJIp*} zJHkBl5kAEAP_f%o6t`scp=;aZoTDQ9*SAD>@M`&vdFDZ8_;HiVRcQt0>xEZ zs86eBkBFSXUhJ9=QOlMcuWj$5?dn{;(1&$ipWm&wfWU4jxkLJyhnkEaJ7wQJddhPj zKVXK#HQ!ew59^m7S)-|aA5pzTTKXl*8y1;D=8lZlTp`Uu4mXGFIjO?-xt!Kz8?rrm ztn@rAghh<%%F8T;n`?zibXfT)!DNf2PnRoBh()(y;-1D~QF9$#pBb}J!G}m5uj`_; z{7ka@7C{R5h=qJcXEeKk+lz~@yyxC3`qx|q5U(r>Ob@;(!jtzv!mMb)A{*e+2NQr&zsQWr#KQJoe>l8Cn+dcc(uDjU z)wu#~bNgDmEZ-|Riz1X|B@CdSHr90h4;^_f#~eBIO{?E3O(36cQC5+F@EWY+n>U-i zDgHs2j?xDVj?xZ6&YWqg(U_0l?Emcqy|rIvx_58CunZsVkTH*Ch6lz-1=3{_m>nr)?ns&!V*jPwWk zF~ygU;%Mho)OZoO+LcCFo;gQVwf0}{@riLuo_P<+4}26y(eZcX`mDZZ{+@QpVHYK# z)LvWEX`Km$Wouc~aVEa4hl>0KU{+4D$DVXoct!g1HKa!(r#FSXo|z1ruv!Z{{+^#z z%+kn%I<>ogzo+S(LMld)B>^)~hDG*M=8MH&9TiC|&~97*6?@X92AfcTX%4#x@DW%J zp}JX)8n%-L^bR{6mXRgSgL1cPtp}WYhM85FC&c3gbM~BdHl&CiDe7W;iXkaV9qPL>JXR zt`wa)rxG0xlQ(s?dVTf=oo*XE)hdZqU2&+dx(_`+TF=1X@Vm<~Gfo*}>oWY{4W0vj zFy~|YJe$LpyoFo2GOJH`vW2KR(gz(kwG}r zI`k}MKS)JZyPe`Eipt6Xa}YLoOT%dMy{@tOztb?S%CHG*&&_AK0p_`b8ntv8;&Uk) zd$;p%Ic}H=tR8<`q|Sy+oCQmFq9Lt;G4TULrW~DI{si_A9<9l^MjfTNeJZQIW!^#U zwB9f9V?EvZO^MbWp0SSQ72#_$Oy#F?J?AfQKfMbgNFQ!%FZ4@wi>T_X9Nfwq35Iqy~H7_ zp?`a4q{AibS+Q2UdvbASxsW%0(Jp0a&tjQ%8Hm zW?zp%@>{g>M8niBC8e2zPllWPwB-4W}DiD`}ddbTD*-o?_JlrKvuL zblpTA;;4>Ne#Jkqri&=XJ_Q#3)i(pHqmOE7`_e}i3uiH%e`wY>bgT+3A`F?&4ddqA zjy$T84Y{lsyPfWJ7j_$t!pASNE~^05{e1zPBW)nshMe~rttn7ByB@G}NMy3zj;amSuG{8ifJ ziqd;9`7+b{`f6pYf|A>Ls|a2qQ{o@z2yJ(nbhnqK8X9B(_`fk+2!zGGIkof1Vb;1w zy<#Dj_RFjH;}tW$=6?7Qa>ky^=zvtr>RG#f5KBwrFi~R*;+mv~9k68_%S@(A`J4)p$Mq+3Uyf0LWqFJqIiQ9yZ^U;`z$-)#{D ztXUQ=gGRl1d(-wBSuOvNvZL?F!N~UcA1#0CipfU>yJqOF=q`{l3BD!Qz23|Ay=4i2 z9PY%r{)U|~SlF&T_*02mg)o|qNV}(@(iaB8Swwpe{P`VopsFvq4UORkx+^9;zh7T} zsT@tx{*tS|oGmLW8{Y;j>bF7_#>Q=#!WYH;<%Uw1*FHW_aw!&M(zZnHTr#qpy^kj( z{nxVdHUjP`J-t=W-}zaC0P`0DpO9z2Rq;1r?rVn#ib4jWFQEAaqH_Z%N8IMyb#*X3 zArELB?EjKp|J)IOlVB&5fOYwieyl8ZW6wkWOHn?Iq04`DVo;=6t8g6Q`J%i~;rEXG zzy2bHG>~;sci;`0`v<*%bhOA$I}sS)Rwal=1^+XI+%@2lD^Ad)wuah5)# z27j^m#tXyYmeHbz3410p|K}6F+r>mcL1~M6EZpDh?R~H@hLy_WJd&ENMqOK5dox~M z+xyb-{{8zyV~;=}vV5FZ1xt}5c;k*zdizQK@h|z48v~Kb_nUReVZPv^E5$B33kwzy z_tm)U>br^-#!^Z}75K~00E!1#sr=4GfkDNA7A@{ zX9KMeW})v-K-c)YKfFN@m?$dUBH%@TCr{GwYy8`Zs<3Yx+gE1)gMgnZ}2?Kplrn^g9_1h)oL9I=_&tY-j2DIIrqE0t9B(OgJCHYZ~&00iU{+!N> z0`A6y#PfoT*Sz6dymIyDyK);>$n zfD|1MFBr^jf6YFb%4KhqzomSj(bK1?X$l5?xEV}?el`8$ttpEVCn^}}%5Tp^L2zF9 z0__FUPwmB0WP}tV6KLxlVbLX-PaCRE=IWO^`bz~5t@+}b#76Cs_VwZXy-IQE%yH5s zzQ&Fbf5+1I^GgsIi*Q2U;eY|=zl?Ysewv(Izq>Kw_--wa5%Wm!Z`woqtPKYC-}{=J zfovIpNm2|lznm`aVguFWvWz&%ypFfn?tkb$IHW4cbD>^&7@9Aa@&5d!fes%2+stNz ztq;^&i_#25F8rthXjKSgt zkp*7z?6$y&kZ-sCpwx!MG^O&jJG3><^f5a!u1;I%;Lg=9x3?G59TYqYe%}0?B`43@ zaC|VLh+Mu`*@xQxT2e7C=I06iJoI;FL#5B&!8I*|X6)Xz(;vjfn_*9EEa(o(hhJ{Y z$+&J3t=m=(s|XkrPYOxN8z&SJuS~z7pH3)7&VFK7cg>e)vN@_Qm#5)ytAk`I?QZNx zE<_NSl4GF^tdMxP77YQpVSvEIP~=LDsz>Nc>+1dKB4I3U=BEjY{y=OVH$LPkx`AIzvJ($@WjOU`((%e^r$y`b^cYTEY7@*D4vmfBqO-Hz3hw-&5Q9K>CyW!mLg)VhjR5gC9C_hlG5Viu;dIb+G}bb^ZcM%8Lzvn3-*$&PBwqj=dXF1 znchRDYVVBZT=AmPYW4ibQ)MFzpCLoIL?;3?-DB>bJd@U+TfKBVp7rffBogxV++X$^ zy#Mv{Xe1SR5g2>Q;{7)sJVn*z8JJrXt;XGT$!N)@KulV8{j%48n{;oc?X&!T!}%DK zHF*_Tfu{|t@KIq6SwXfMQHkaYL=EJa50yH7R^?Z0reYoIW*(MN^@ex1H1^Y$?O&H( zg+({J^iQOHt6#!Cyr|B)s(z=3svhTC24^p%hb_K+NIFJvLIn(110SXYbzd>6zy55KA$;qDy5_U!`oX%W!1g=!hoP4 z9n#&M(k0y`-QC??64HpYq#zB_ozjxh-QC?FXWho5&;RUw_B-Bj#`)j}Kd{!l=2~;k zYyRp2LRogO7zu1;JJ;c7JVN{FtM7Zy`{xITlYEku-~32q`A5Y+98MQb3gyOi$X3j+ z@miF${FYPZ;!LM`hV}^D&{qOK-=vM!H5EL&^Aik7*-2b=M(9i}cr1pVq!GW?QaSHu zn}x|r;kSL?I1Jf*g1fj`n2M#O?&(+&S|#}liyY@#B^TaGe0DjkIC96w5Q4&X52)3)e-*%M69$v zd%V2UREj?$K|nkOShUK@%0y*y`&DOC$rd?PFEiLGQ z2b&Ki`-H6Zjs-(^N3swR$9_t}@ zIzv%eEi%QT@hc#Kph0Z!;2#k&Pl1RS;$Lhtd7GOK{lcnP<_GU`yJN_G$1_s$CaY)o z`fW)7bdUY90>Dz=^!fBfK-{3G&^zvKWckF?|<>9l$Eh=MOL06VZdsC(N5`C8>qVJZx zRjEZJ9AB-01~y=#yP=+ebgg9_gGXj)&IKtuZrOo0z@*J6;Hu^3*1OvMC?YT7dt^tH zP^DdS;n)87>ChQ=YsH7D9{EO20@m(c;{x1^LHahvXms9ORgb4|3pmZ}5uRTYtG_s? z*No>clit8_O(BTv*;7Pw-PL$+CHR{~bLr&Iis_zCEdFJCSmH zI9pvL3J-Lv)nHozB$1*SL_d5P0&QLj1}wjd3s}a^c2@PYH|va!K#mK+_v2mc`+U0N zE-_6;`&|u782P`f2ZRonvZt$jP@#dLP)T)hY@1LX52wh*QkeO2Gquqm9qZQLn)fpA1vkHew>L_%Pyr#0> z%Ep+~(>ZlXbrdnMKGix`l#1OhtO7Hfqg7Q^@m0&u{GJRUO(oEYWbcNBt|e(EkuBpk zsF>1gnY5Mucy^!^k#Z)spd|6t&dQAnrkPs@3f~oAEf}N@W?7y}+NX2U7b$fa58i6^ z9QLGdI-uS5RnBqBIM=nJ<%OT^yU?h9|C5ngE%B38C>Q^yb=&sA1sb+%Z}KM4 z8-ZAv`NhJb?;cQ?v)8WiT;*>~(({Wb3G&Xuk>^Xodl=HJ&LKj{BzZDtm}P+uOG-}Q zH3e9V(cI9C>mN*f)hews6TanV7f&cV6hM|-_gXTq6MT6iF_uZuDz6brn`_JUI)xu2 zj{642xlmEpx$qr|N=x5x5Bs*?UWC1eNIc=dum?g6@2q_F>nY>-tQ_9O3Kf@R47XY^ zk#>ZuC2I2rc<5`v1AoW7#V0*^U~9;l12S%g;{zW!oQT2p%pB8`OoM)I#=Z^DwmO5 zeFrkdLt(`(P4p)X=VU4YM@`q6=JDAwLwp@m#dyrD$`?kS(*Xmx{S~~eAUWNxFSa(_ z*6hyRcYEUlNz#@kaPb5wRS2lh7W`^dp)w~n9NpHwzCHfx*K^!Pmu4@WMv0a!i?-U| zKgx?=J##`&7RPb1RA_h+V*(bmcvrW@7hIHG!HaQsoT_HLG5;I(KWCN`e?9Xg?{oX3 zG@w!0*606CEHoZP4qqw-0h^<~;nL;l<;%qEZ@|j}>?=bVoFE?y?iP?klDcbOf9l1t zG2<kXhoF~$*Mh(aMp#0hz9QP^OP5zm-DTa0sF&CQkM6rGDiB`~ zmmOyExPKtu5*xX{*=0O!a%+^LXg0~RSC-a2lcNnYTg%Ytd6afqcO0kOANl_9Az35# zg8BUzqQ|Lu@F2lu?uwYd$Pc?5ruzQen$UzpMLCOSI`2Ud?%YQcs-R#Oc|;lt`yo%M zg&BdmlkRj2FS_w&chv!og z1Ml`YjEw|LLg7po7^TGlG+xF<6BD&-ZrYo+ggc(AMBo*7{CzF~a$urV{_!zp8Y zy~-n*a%1%)?(9M8Pn`KUJ^1%X1Ox<83kzyNLBVtBB;d)OCz6a*0M>3&0At#psZ3%v zettSJ>d-K-biaG420ZEeSP#&XLj4KN0pRn;ib0+op-%qyxr1MaHoUx#2X3_{t7i7> zv1$@k6Z(^!z2di+Q-{qj1@!M{7m}uHE6p8x7}iS7E175(G<=M%zLSNA>eXk24SMBC(s`0A9F)YX=Ig_#eV_MYRax-HW>X%!}T zQI-7M1Vef6`jgo5PGvXhq7>bSV*dc<0K&R?WDjb53mB+@uCvWdw(ceWTka0K79e$a z4U#&1!v!K>l7E_m0W<$tD&Lb$M3$wc&6nT1U#c`<$X@v!#U!i7S45gejAHx)$z}Qg zlm%q9d8^(YXbKJpJxtXUZ&f%bK9unQnEj%O`PcNC-doh^&D0OTKC;)DdiYhy|E zTBc9Hey70b8^|ye7ZFV4ie;^M?mIC^&pnzRNiS#TS3Eq1>xW7py%CT%a64Nb{FW81 zjHTia#%0)sEWZq{@cxyb_%xb0raIXxq`+6xsF0!H#_rHj2q9UNd_B<2^w8L*)2ZNZ zP$U=)PPcq*lrs+J;tz-V-mk|II3_mi)qdD5)Xnhxj7{`-H+HtLv14p|KVSs;&!*KD zNuJ5ionL-@7LaEjU(=N5!m|P7x`#%r1Fk=LI_SDa7{_#cjWufE?Qh(NXzejf_DO7X zN6mW3oR1v0@($6+sDCE;>r3;7sq=K9{CXBtEiHnC2A)eyDTxEzO-Tdd(55&w@9kur zByip{XJ~}GCnw9~Cp>B8loO(pQJ1q8Z}|h4@Ir47!;>Z3+Yb|wnRjSoA?wX6#P9$w zrVt+7m0fjcOvq9zr=PklzvN*3KO%7iGd)m%tgB{n)abA<=Gim=1^&QpYjfRPppgC4 zrhWr`%~w}fS4?YzNd9k=azedfcTRR_FKLaWBae-xV ze_~gEA>R&^^k6hjPTiG)WS*2y&6{>^Is$QF`kh3Q54 zROqg4tOERD+&e#R(?1r^9FMbYKK zY5<05gJM}0a^>eOn}B&K#z6N+(ev}=%Bw?b)!BW)1O*4ts!Df*IFTTL6A`hE`*BZT z1$MIdH;aV?!Oj2*)dL|OK!;RefHYQU_3<_=>!T(E@Q!DQ_?HKLGhAAfR0D z3&gY)n_&`=yER>FO8{y(0hmlkO>zWeRRZgEShlptpaNu47%|lW za4mT%0Qb*AO#d?`Q=ItYu#Q`BuLjpj^&L*BjNq1h|q{@u0p7d9H~JefP*>U5f~Vh((J!ky=c%pmrFOe5tHBN)21 zsehdPw1O?Vt888FKnCigRO!(1-3j!iNxBmo1JgeX-7Dz%PRQ|!Y@pu&cES&<2_V_E z2RPvC>uWc>YLD(x#XJO{DH(`Tq?AemIxnkEgCcvHRuf}EQ@|NC1_4LzCReHk3oa!94X8XUunYdeR_L;u2BWiR}6CO4)zY za%kFlsCTF{uEm~1epR&8Pylg_U2Iuu>T?_foFH;W1GF}dRu^}_K`J_9jXkLoe4y@% zYRE2%w_)jxb0>}VAH!69N?WWPUuaSiX2&TRGjqjwlyiK?VpY}44ipmr>Ygss7YYIc z96y4Lk|dztuLAo0Yg_;Pey%4kY9low$3yPyl7*wvjgdKv;Z=+pARv=k-}xyrJVIxA zM7TVM{dj=Hu8;Dx+SVYV=J;H5`>u08Wf&!R^T_4?#aFfJ7igiaO~{cR^%?r|M@&dK zNnuZE5B~hf7c#FxDF9rC9rv)iyL+{An2%-@ihu45#x;Qn)bs@CT0^vWzBg4mPK;1n z@|L)5`z44`e^pJQ*L*___H!*&bq6PZ51C{J1ZOvj7k{|tID{z($L=gCJH|+TuwY0J zmvDNHZKQtU)s5{`=!#BbkltxIi*xT+pMpGh!G^1a9bm30$I0(`5d6AP2=@SeeQR|< z)syjV2P5@h7Ai>-!MgMP+Lgg-CR_I@7HhCCf%}u#{Nl;@O6#a{KY?~ZG#J>)c&?!h zHK=Kp92ygB6UL88<@WFmtQ_IZcR(ZSBZNAZZ;1TfEy##H#mpKAyUb{g-RENA?}GDX zo(fy=%sgJ>s6?bdsMb=m@l<-T;hWD)QzmBkB0qZZF_@#79G)@<7<89D z&BiDFtaA_%Un(c2*s6Q7vAM-a6q$%VQ?@+ORmVS#A;uP&eb3WrEB%E4Tf19oUq*&T66E^E`p4x_B55xJNn{;S@Ec&S{=HK9r}(|f;PVFjNr)SEuJd*F z^dzgM9*NR)`Y#NCzTy@fn`!K}_$~*tIq|fBOCzbmK2`(t^&kUVTl=rqAp$P?I9eV9 zR!P6B(*cpIdXAk)qr>3!w5IEdO&BrL&j*<@Qx|Ih!}(ow62~cWtoeAEepk9u)$@U_ zg#1OdLMprt)uWD(JDaX4oE~C_cq%x^iw~jJm8l1tTLF+@WJliwq%yMHc2HrFEb8OR zm8c2oZ+w=C?(c6j0=tUY_v-KZFC_dzeJCd*Gm!#kxLt`OAj1gwbfS)7O66&IFs7dR zX0_m}c-LPWmot8SL{apJC}S|K&>z_=*haFd$%Z7qhQcOBuPtU-;Ys|)^j)r(*;os? zJhU|XHWeZ1t~F`;0ip0aL({dmZ)v*WHiD%x{6hmSqZ!tehmwgUZN{Q(*(8*t!tABvT>es8dk%Gl6;?jdnpskGGM z9l7vs(esE`X#C`Lj&L53UxrLhMGAcS%4ExjCIjvsW|2is7ccaz)J~_I>oRcjwKzS& zhDBt*fO`}m9-Pr8bn%;T)I9hM!@(uhC-Ske(ExiE}u zq^-$eF3$dsu9uHU1e_yQwHVdh{Z?0d&I%#YBro1VLGP~2_u!b%e4`c$gq9N*5_EIy z;|+4hd)B^ogr>EW4ffh zSqB)%*3OL&tkuk{E3uB4!w>GPKAFQ*U)t}d*t2P1_*8q%?Q8jCl@aM$pOdaw4M&JE zjWG_c)T@6+y)cZcrk@z~h|T|N54ItPC~dg~on#o@j`dP`+(-2nbY_{Tk;#GFAz%{* zzW)yiR9t`~TL?}Qr-==c@*oi-fK|~C#r1!F_VOVRl)m{6oBs!$_ zgo)vIk)!Bdmv!Y3IU|L_)@OVhO}95vUtQ@+r$$58t8$rAXf)Sov?eh%aJy@`HrWeT zYe<~zDFYKg$F(>5qOUQRuW&AS>#u$tSvvMUpl1`s!MhRcES^Y-Ln@y^Ya`C>ENRjP zDoKdy$%#`#ja8p|wYb%OcP&#=;ENgy{r(IBeys?x^o7Fst@1=szmdX5;b?uWJaMn~ zGvd9})^DHXE~=Qf3LeGq9z5%0vGX`I3OCk^SxFWC-v5Ll7k%!mukY?aR^~dd8;5#G z%!wgDD-h`d_-)k>)d4%0P2ebKt%wKZ8s6gmtWG`yq465zRk1+I4q*)0?Z=bP{jS?0 zkC73S9re~)(Ie;Whrl@aaYH3>XuOGoDLr`Y-tx4&x+0vlb~bHY$H|JScajrb3gH2w zsE(Yr?hHIT%t^NQ)q73YBrPlKdn6SLdJQ+LGzm)VkvzJ?VjMqB%iH9lY$Zb{Tu=4E zGoDQ=IkD*A+GWRz%}|9&o=c%nK9Z?}u2?o-&lx%Gt>SpaHD3}#%H0>~?Fs889739O zlbgYm_ZOq~O*J%QIW5*`)-3q?HY_?x4}8JrX@zv!r*>(QZ4!GbS^rcwen@pIkWS#_ z3=E}OYcSBzNZ`Tg3KNcnTw#IdNX7dl8$T+&xR5_p^MtZrz2_^G8tHv2wR$&Hy@7=w zo~G%siSp-+I&;;!GA#&_e)3X=USGj&K{Om0# zM6Y;Fn}XGwzm|q^_1@UX9+Iu=_K6*E3&}_0o_>HBaCNikm*v4--6L*0PMjITStPSe z)<6IkW!*?(>8ei^@*7Ezucyh|g1V6C9J;p2?N}eXGjq+`s#-`(b#zpxCWnYCQ|~_**l9L zg%l%`PuW{DfQIiWZA*47-O7x*JxVKFnv4W(gGdN^)&Q&tv)bUG8JFXJc| z<-(}K0u2_2;5vpSCl7^%2Ru7QmgDG-vKe6LEnr@c?+UqDOr!)KrDPz)oGs=}af`g* zi7Fw8>Pb_I?JpE{v!Nb>7?@}jOP-Urgox0YR2cg5t-eVjUa{xOb2BCb|MGpdHpPM} z5Pv{U`&TlC5;lZIPZkhH_|2}pF_ul4a`OR8K9-VL+;0 z=>0pCxtVE^uS9L~jWh)d2}+NrwT;JaojjEbnL2LfbF|qDv?xr$1$eP9!E-g^il8DW z@>)fEF8L9_yLYwNdV>{)NeQz&6)V?gYL9yjD-RNg@r9pL7X)U!xSPZ>WMN8fpE>o>zUi(>$bj(|kI_13Y&`H!z zRdVP2r?vnmvU5cFR{Jq3Je+2VFg7;U7{>w_y9+EJ^Zgaj0r(n9x!}VnaMsrL zhQiET*k%>ScPR~}dn6v(M9Z@2m^+wzozedOSitS#nWMc+QmQ4 z_I-#dYSj^eUp&x|LHqnNXf4 z{(2=PCO z*=?wp>upJTH<~mn(%r48&fWF&aEy#pU!UUO`FI=InDqMAcK}v5(rbs+q%##N52O zk+%Ry)OnRd(MIgghy2g*XD1y?@egNka-QuGjZZ>@ALl)`bmXmPbh!^z`K>rLH>PCo z;DOhDNZhDNt!|Z1fp>kkb<^ai&f)QTE_Rj=+Ggr(y6Mj7N@(Apaclx=SMi`Zt7>G@cYGc@o|l=GfB6 z(@dKBQTjDW~!>R@a|KU@tpv;>uvft z@cJ`HQSDqwHhvz7xnLQ0+s_hH8WF+Is6VH2l_t`CZqiA(n*yF=(#v_s!wzTCi?^g! zQOljae}iN2z}{z|LOaAvF{84&49r(5Ed<7VXhX~cM@zS88D*nFD{72Bi1e?lM}KNr zzl@+bXcph^UL7c+GMs>17O+mT1Of=P5*Aq#(2EZX!Bv^l_=eeecl`MaU8P3iHp=Iq zty|t2KpX{r{m=&BhYEG*+T1=1QQvVt>^r%6pHQ2y#wPV)_(5IBrsqTH=wyv@dUX?Z zhr8C|2bGKQk6X2SsG&U`RRVT0yIYf*F}}M;(=B{h&w70k2f4Tr_tX*aNEJ=C{iyr1>^hK{mZI&6J%vK=H!2`ZrYBC@J^Zd(iv^GNaKLyXro5Y#0R2D|} z(nscTIdn$_cyc$yZEnOQH^5@61pDU@3*fVKe8kKWe@zEye@W>!>caej<4Rt+B2wcz zD|bO)`x27d1z2bK9T+v+77M|D(A^z|R_Qgx}R+ZFQs6!S}Z4M z+Aw{;y0~!eR8B|9y-p2t)L?BlN8lVL`;?efL@o5=Vy`3s7~9zHH;gR-Ers=;_izHz zeSX6$M4){`{~w5%R->wSJ8EwHE&;^W{C5d@+7KpYAq{kkPhTb%Ft=$rq%S$q)4wH@)X z59L#zLzhu1=%rDDUb*Pc!x=ibXdb!!zaPx*45V=v29jpKl^cq^w4Oz~*qdU1T2%ZR z6zg-mEC7mF1?28iRw%@6S}awgWuW5?$aZ+E_VcRrrC=S_yWUb-|7^!U$G|^~M7~Ic z4i29OQz#gY$pz|kvI0eSbZjgpCdQve^|Kp|My?}}#w0!c={;~w<)D9K-GIuSW2J;T z13&p+D)+WQX+jPTOjvYUzd;k0U;xey1sv)tK!cawp&_5jx%o3D2S;>}+MaKuf*v>>^fQEiotrHnBIq1AUuVy4Q_lA| zG9zES<-m3Jy}VtY6o?Yd#5=4|LBr1@Nj4nrSifO9V7kCS^W3b*hJ=PP(drVDkVqY<0kQ@eDJd3OeV}b) zB#@Y-)LRUE6G#!GA)s#pq?NzD{_`@1UUgY#tB|m+@@bLBWSgoBBUlE!Nd624-i-uX z3?XX9-6@k4C~%O1nN7#@fPTxzbhlX{t5%f-GmMgMr^)1f8gp(1naia5v@umPw12^ z7r()iO&d|GsX044bGTe<-VL4+8_H_#&Jh~{ANnD$>SvW1K3`@&KNvqI2;r2kUpFUl z7^-u-4Jw`%3t( zyF2MQ?Ah^P%S1?OeY~kHfhFl?q_a*d1a?QL++&#eFnx6;32YLOxGa?2??&Z8I9jz5 zcsM%Z_E0&Asq$BG|K5b_iqoIHe&;w)EzAAWE+ba#t#kkusjI@G?N z@co~qn>z46P+sd(mS(BkgtF&MKo~qL?%7ZZJ0j3Pa8xpZjv7LGrcQzmG!LKw;_=t6 zP?QCh?YlEA?x&97T&fQ~M&l9L|DqIw53mh*;$%IOf7J?&_N^4IPZJt%orFBft22r3 zm6cjK#fuUM$8xel_5_P4!{E}zx5!ruVWsR*BJ0#+t>W^f$%W&Ir zXY=Nc%UT(QJK+GCS}Wn(V0qP0DkrTQ7n}wW+N>mank5MlDgG%-*DF6#tK{h!O3QnN zy;^ZA2V8*AYEBOdVjbug336WPQ&1)TYfYl0_zwVh1e?Da#D^QhT0 zgo~`?s2~-ZF}?Q(IXv;kuQ7$`XHh+&>Q}D+Rd;H|$HTML;Swx8JoU|!^%50z5!!Iy z0XwU^hjc7VM#bj+xw1IOq&o>e_hiVVczPgs{Qm>?n=Pv5mx({*-4qfx?eRMcASMC6 zgt?fl9d+~_(qgKEoW4$v|M4|Q6;Ig)#=EBbrTCb97LZ)QVtN0A0}sKJgS{3PRDggH z2_A`{Lz$Zr&W^F=bLqTj6MUUB8ztFM0nOU&ogOIXU|6hZ{v)Y*Z5U z^Jq4ow_t{~YOjMTFKN3OJ66e{?Tc6#LpX#Sr{~xXjcIYl(QZ+S2O0R13 zEhddVafFu_$)n`_`xU|ZtLl2cAR;2d)Z!S6vsLW2lz>m6m&*^AHdA+KEC303<>>$_tpe8akbmd@gHKl~XU`Iy-wgUn( z6w00yJ!z7ya6w0$pAok8#JPHQ`GiyObE&%JG3WO#Ax^SIp4@6p@J;!?S3GGxVMT86 zJvLrA0TOEZMd&s6HzyrkZtF888rt}toKQ*oS10021+uNI1Mz_|b@Yc*!9NPk#y;4i>k@PGkT3dl|r1jN)U%PU@AnNCAqKZr? ztnEn)j)d@8+nX+c&1;Mem(Po)sX|DP?^+Gaq(|Yy+kV+H8br-5cHfrIiY_FGy=6=jiQp}cS8|$pC!^5FLd=;iT|Zw70iSN z*Y^9`-%sPv@)8S36D4l@=1BecN}cr6+p(e?aB5@VAeO%fIlsXC2Zrx>Ce8#AQP1lz zlIZrmQymJk^kA0e#91C9tfKvd>{%VJc`f;t0?;J}DSfHDA4xJbfqJOkDvTVw+x(@0 z(~@JiWiC{RWK3pEtS8J(;;F*j5Yjja0hO+81PS;iH&3lG1wO)wGc@D9NbY8L0+FPj zek;dNeKJ#kKaN5WR1$HcN*X&?H?Rln!Kc2 zMMZ!_6IOk2a@DgJv5611TEqe4E~+KJnC|G)Zgt*I|idx-ccU?pq*u)1vc7R9Obn^Jc-H} zb0?Bs{zCk?jZ_~1-qG{mGYwm@=VR#1vh|y>hbNrCDRPsWLrB+Bs={K*$@<>hViUn) z(xM-KCBzZsjr9vTlo?E|v?XdAHG>tl6|^ACGdwMp&MpYTteFIxsKVIbfhR?RaVMOmS;#{SI+Tzpc{za_79gj~(^f zdlzj3m0KRNzpVTIr%1nmYdJ-6S=j{Zd;sN}G8Lx=4z8KVfS{<~K~3@aAK-en()1jg z6tQutGrY= zR%?^LPtPZ-y100SOj7Q$_h- zGoGhz?pql)SZdqld&k! z(TakQEHLIGL)L>6>qU?vdEcg~Ld_}Ta=ih5`>tc&ZG$l}s;Tm^Q-b*z z=HbAXunkGxt>0?P3lE)9spX7?futZqJ2T7jT&_Ws$SHDQLqzG-ULGACq9(e1#_m(7 z`p0(myi>a^+Y~IRiiosA{EumcFHQSJ1^%Twa6rlj^ff?WUN9iO>IAePz=7A;q6F~M zic3fc0Ko{L)@VR&8ef3d{GMZF;`adp@S=OK{t_NIgOfXLqiD#UgK;`9g!}-wI~uaj z@<}@%Rb!{NlJ%-A(CzdD*`WXDfoKCs<$flc@caA)*12vo(suUQYhV-s{hZ*p|3 zDmSi?;v+kipya5ac!G*S1&e>ixP=lXQfe#ub~(H%=aL}&+VA9~p5VU(yLFHwr)7rR zFQav%Lg-tAbggyADX)=_N|J+Zxtjg*=B9ee>5RZD$5WspyziqHa=~=il-E5@w5ls4 zA;YwiB0i>lnC+r-Oy|tw?+P>RHc0$JhjwP(qP;M{&ZEyt9=x(j|am1Dx+0M-UsW;z84F)`5eG=Rl) z2ur*S}UR1>|N^3 z1(JnjAlUVo@6w9m>F_F#sYaV!!{Wl=$axf))?mMb=FqHe{$Mb7@0r(PJuNP;`ndF) zxed#Xja?rg+QGW`5_yl!`>_^boF)y(S^+P^IU4H9bKC0+Wn zWB@{h%)a>=@<;m^UTbiVZ%bVX6J3LpkQ8Xl$BbgDhZM z%q%O-)E9<#a@2c@!9J2K9h% zN1d~`LCIkTUvevO8rOmO3yq5iO_<3?TZ&Ll{UJ`RPfgF8nmSvEpE%=*SH77H=-DXX zOPm^Z#B=^!b)!WAK;livOJB|S_B!y~tfzXe>uq4qqj5tXZSoVyVo+D@90aX&+l|pa z@z2*TGGzQE83xXOZKQ3((m=RBs7)~TOEW#Sb^yvjZ^V_L)+5jO%@Q zl)dbCTKqMWDrz)u@ldZ*Sd)9K-|+g6O(`P-i?8+UCFI5`lAH{ z%5EfZA00*Ff%}^?cqvRM^4MaRtAjaHXeQd?d}c{E7+6>q+`~eLzEfj>40}P{lJ5fK z3ZjAZs+qGWc2~^(zv@N|z45oft@G!INR^{!^YLqEWOTN4J=O^?Gw#;j?Kx^7mRRp@ zDa~tZ%Q@E-U)(=IuihM6nl1?mn0A#Z=pfFac3NS>lr1 zz_2Mvg0y=9KY3>jNX)bk{~a2?X6#2G|X zm4km=%>O-rt@khgU~n`blinjGF#qR0wt;Z{-*A)=XgB#KV@p)_Q?D|M8NsV9xT5R1`Z$bdTH{YS04Ej zk_4h%{tKpq3<(o6#Ac!4qhU{!*=!Zn?o_EQoQismk+Ja#@ZnCk`tmzCI+o4=8AJ6Z zW;y!6U8$ddfX?z?K&K9P@P7&UzYxm=)<4jJI2aDgVE_4gi7{Err@TB85|SsXpS4a@ zs-(A!U|uJeNss~8EPM{`O8kojG)C5oBH%}`Z`V}j<7Gzt`#Jqnl0gCa=(K8JDT5|( zEI-Mw4p0}-v^4AW0_GCUT2VDM%-L#7({((6bp-k~+s75;a{`*A|Bn4R;OYtR&_7HC z&v(CPm6r9n<8t*mbH+fMMbOv&{-iavAN=0W7jGtfAeP-DRUj#@0Xh2nrt1C&jG!P- z-*c|a^z6;mlgaNKWiD)N#vTlN)kK_tg8ZM)`@fVsD4eeW%{fj5cG9OAg4W~FsxKR~vyH{TAXtwgP3cfXv zy2YHgZk29bzsJEi^IpcW<9_qRGRd&_0Z!2)n(7Q!4eiEbO-=aoDSakdn$zD{dO12{ zhiYpO05t|zTqsw$e*I%*C}i-b$nZj8Vqyy3kOHy#cze`uo6XJ5gULW?=;ity!O#7H z?$JSdaiSoAq8J2F^bG%8wUklyoSstK;8bH5AYZL8hvM?~6FaEk6!$toK{NUif#>P` zfc6j2V$G=J<^v@#$6G>~X4}VXKOUi0+Db|#6_nz?T0+WcSzirsu4Ljoc=Bu|-M*j6 zTONlJE0<^L$Ty)iC~s~)cz6n4SbCO9>~4yf7-FD0liK>X(KX)(GS02S`_83f#m35t zmhW!Ak{Ahy_fj4+=leDV7AYq*nK-BzC*bo)AMUNnFp`_WpZ5D$EBP!;^=%Gl5c z%NRr2CJc1Tn-wvbSnsiy6W3l7Y5kXg8oKKY%ko>nqIz+NJ4&hfp4!uag^20TwJXb` zn9_5F&GWT5k_QO(RhsWI!dY|=zU=4e+SOQM=-F^qAxlLqg@=-|<>$~_z&-MvJ|$OB zFDc5(uq?ENW;7x~5kV)O+)(-lfybAZ2{h>LX5F4#roBAmj;v|sULJbIe}8@>%7a_k zw@s4YFF$}aMnETsoyBHO@|S=bgYthAP}7ec54{nK;Pg#pMnWBB^|_p>iInQ75E!I# z#;1A88zwV8zwl(!;G!<-dglQR?nBLl&U=W8+?gtRlrI>I9lc*F?cR^>6lHX3`-691 z%O|}J=YI@iV3TfNcM_q2j$zp{e5H!BdlNGtq$12Yv$Rt3VpxAi2cKQN&FYUHyL+bd zBzXh&xQ9(9;-qNr?qCk*xVG^rNtVn5F*>8bIcExcB%djO->ZX{b4eB(nB;Qz{L88^ z4RgLT_6*2Ll1FguiNx7z56allX08rY4pDD#Dp*N!1%mdbt1S~%Dy$R$j=EdM0;sd( zMgCZsv|m7BK1lV5LJTzId&0wp>5N!veRgX;#+pW7nsf7i`g|M1AL2G%K!VWew@RDz z-|)R;&+){a+1IZn^bGR?%_atOw5E+WH|vTj&C5jr349_aqZH`!;|^4Y1xkDlXAf;c z*EeU?(BbN~la5!3d$C}s5As&X;G!^am9B@vYGn*Q*KVBc6itF9$68uA_o25QY8M-; zs@?6Rk5bY*Ozkaby}=@-d09ebGf^mn%NS-MYV!{E{dVKk3agkEOFfw_is2zLo6h@h zF77thYMs=hnsH5OiB>H=x*D9qy>|DBGPwL-4sif+`TbgMN`z8Llof%TVG2$M#M`q4 zYl*lH_c&@(XcoQLraf_sYG%+XY{gy_FX$f5EeXP)xOD^)gKMX8=rX_gcpq@y&X;7o z1zJpQZsb-p92=KX`vV2u?`4z`&~G>$%uY-{Y+p?2vWFa3dP$rdv)KQw>83LGmfHYQ z6#uHgB7RYGEf5j#Qr{a8u413W)0iSI*Y{F!yjrvny5k8qK8ePPvTj{sdGf^MFlYE3 zyp)7reFkJwqJ*FN4v-t|?KA!E-h_H~0_ywH%%hOkx^U%!&iEm1`87O}9KAT~;S{6r7cz#az@zHi?0Ek2;RGrgxtda)?1+1}wu6cC+id)&8r zqgFq~Nu*Pu{1e5`eTp1Y+ze@Y-4|##k~C+mMeA&m$oLfoh5Rptr$< z58q-_&b}_>wP^6hupJ;jdXwvx zu@dm+f96UBJT=Pa?%S_2-eyD{wg=|B2g^^ASrD0sI1`^R5ZFrZ_}4!*%PzeCv-k&s z>3Cl#2L=Y}9WQ?YvTZ(fG&EP4jh`u*nNb4T6}#JWbDon<)Ew(9aS%pL2(&5!>KRl} zjl}s2Hv^_oS_f~8Wf}c!m7o0yxDdl$AGl4X#_TCHowdTz(q)Hezs~E4io|(2GxK2% z4}JPulp*6ZhAWq6r5cTU`3o;g7HVQxn3}w`y(%w697ADYp9b|HPi;^&R!3UYV~ipW zwA*?)7r`DXz}B~Bc#LHg(N)i9GJ{RPX>^1xvb4$O1D3Ug|)gl zTYDRR(px#pOxQE+jNCpFAr&~2mdA$gY~DfJ?FfW{+_g}IeJ)ri{OTdIK=*akr>YBCByZxGCPMd`jU?BtgBQN6{?kx%$sxtJ zALc-MpZvmlHf&}| zjrpaQu}Mq`N-}umUGn{K;LO8tzRUG7X|?Pf8YT+hCWKQLsyZO-@%y70hrJCACuz?=$T!I=pAKZ?yI>DvH! z;CsRPUSRw{HB1lh~^&4Ns!{iqF@) z(fSuZ0Pd+}wrQqI{Cl_pUtJJoG6-}= z6hU@YK$x$8LQ-~&X5xYu$lLiQ`WHEnaLJ+Du8S|sr}wfbMuL>>JkOX^GD#ktG0NqH zfp+I5SgFMU+s-To?_&|TEdG2{v)I@6cKWt)V$+I+uL6v^1OyqL``^v`Ou-$m-eHuJ z)$qy`fq9yKhhe$Ae`UX=6$e(iO0(4jkOS}P-U+NiysPF$?m%(n_Mu9u*zh)NG($&M zGrQhF;ym*9XwIIWD0)(Munajb!E3Lcp14{B%W8H-yC~r^fW*hAb}xp)LtjW7B^0mR zNJxfwkGGN5!!-*faUj?!_0FjuD_h&bc4?IV%dq`|mPkw~`v*QfH@HHQt?4&*az}O% z_;^7z@RlomwOHHeG@eK zSHIBfHQ$|eeg74P=J=-^9;-Vm_FK=%s1#~M;x=H=66StpO)@@|7Es|bOsL;}zOIk+ zJ}_>2DA;fLH^E?W^}oyEHM&_M67shH5DXW4pLcQiaJR;4AdUSzto87sm%U z?$F!s2EQN%W3Hp=6(a;q@C@Sl_VUAVKKJ>63q|uWlhgXH$w`p?G;s}0dAc?N#g%U< zE#lgJ?l`*y@%@%8Ie5oBo;VDn1*Z`*>?uPHA~(1n0T(L=n=0 z9l@5?8^XW7r@ZV+F*w^$xdxS!PDQGw35GE(!yQZF0d4NAN^?}PO7nfamicw~V>t4` z5#!S%Bt7vsb)l??+f?tz6)re8wn2`gwJ{u;?=%H$(gpDL4MdHy*?;q~o*%yR- z`?89`e#C`slvWQ=IObWG;^7sBG`FCLKA%vTbkcgbptd+pn4%`RgErw~ed;Me!dS{5 zE^&x=e>x;AsrL2jQ1@_tfaomGOreOiJ?};QL6xCA-9&i*mlS3UhBkRtl%~-!igz9Q zl`vhGjb}H|4SO~(iS64t99laE-imVJP7`n2TP^S|mQ{RYHCi8eBz|KSs^r%UZ(RQ} zs%FDv$Mm>@{p96A&8H}y)3a0kS+{}N+2<+zsTLdqBKr8>-BYD4ci*n^V}F=B-y4iY zPA=~J;Q3Cl(YS!FH%+Rh;axuS5|Xk~3Wn?>s_JeKa9VM+kLh!Cc+D+Z;^H;*+~G0E zR(4}$Xo-y_!3m37n^%xqI~hBwkos@spM0Jyp4D6pyuZJH2q2;YkdJ=hod2Kv$N2{J zfP^}a6MlT)_2Z6_FBaSIdfEe;Wlzrvs|SUt$*zdkZE#mrSH%r+spR*+xerW$`{+D> zmNjerAJoV6m!gF?IWEW)RZa2Ljx+GlGi0QuU%1)D{ugI&9hFtLwGRV=GzdsZNh2){ zN_QhjOG`<2mvlEb-6bvEUDDm%-JRdQUNZ zth>3d|50Ih2Tdkg!ynG!r_+A4(aoBZ!o%QqFuZF`tm7xrdDthm_jerCzO>qL&FWvw7TlG}IogU3$0t&GmFu*=S}LlBM?+ zZq&oI`wJ|;TiMT|M77sRKT(27mFL6S{WyUla+RGgDOj4FtJBIP_8E1Ry>+zvB=C&k z98SLSN&U%Y1qHnLb79;&e*9)qGO~H+anpR;@z|%|I$!x=Mp737pxD2#lI^yE|8dF~ zY3=`?krKDpG^B<=a0Vw+01nPr;c6QP=JGoKm0G~oev9I6ynTDF=&&^{m|u(rwIciM z<}dq)H~2i+7_wv6*@0bj{1cQVD?`5-r-?@f8{X0T;d7_$a?6R|!ym)b$@FaQjI5@t zyB)tx)mgziY%gxA_7?(hiC)Bi;1Ut7$^|N&o#WN>MRhT$`_=^6{`jdQapB-r*9ZL{ zIH?}Xb`MK;DCJec4F(Pw=7;lgc$^$hfAD%Igcv8`rILjbg;g{6>V zyPAc8K2k5$ffx@k}fSQQvPqWg@UqL zP9~t^5BzU8cu+we%8~l<^k;>O(!BEI(jS(ej?N~WhPJJpQ-d1%9YD(8R2?37+;+{J z`<1u(aR~;G_R&TN1&S)gvO9wt05L`d7CaXH2A|`GtbL9jm6GTFAyiC>9N>KKh z#Z|?C@51^a52%cJQ49W0JO&j4jK?tkzs6&X>ZC`r{?(X}=Dg8v_O^I`VD+O~zjZV9 zue9;=l;Zf`QE?U3zsAUor_~dpDu0E`#)1U@s|fnRHA5&K=wZf-V+@i2Nb|4$KY%r7 z-7g#6?*BJf(;4wUz?#rf>|$9H0IbRext9vP7%Jq|FClOOFbn`or2ZAE zqd-a7JxKK?b7QRd<33%l)MY3CS8&-H3J7V_{dl`KD|{F<(d6P_doY70ox~>mc$dps zjxPMK^7F>~qlWGh(W!b&Rt%sTJ}A2q436ZGtsDtQ{X@t>y-5z@2YEyAhMctcTeFY@ zrR4ukI9Lt>Ef|OnUl*9AjQedG$dLi}3;6SwTmyIr#Y?MrB^;yT87Xn}nSdve#Lcod zDAW2snu7r62@IsW`zWlQTige6+$ML`bpYXsO`ZSIvn^04_y4kqxdxSM&oQFPay~OCKoanzH||KGT;+$Z^AG=jLig z2Z{;{;~owrFvAWev9mucP2_)hRkL6neA-f4T1r}S7Q@)J{WW>K08PfG*NL9E>8*w$ z?#sgfji5z3?|)`WLO`YOFJ|%|Cl&BQ-~2o6i3|?j|3&Acp#*6#nkg*e0Fbp@R|U~j z%`Yz#xx2fMD4v*1rd9sMeDi~#C)~6iwdCYHA0Ax4HM`>a`ueil7Fc_3_g+WB5d%|ZZ@0ZJXhbVO9n)a2z~ zj#Ch6`q4UwUPC}eM#f6G^p8_rixx)F*x%mu))ROqx}#%~)?R;rP}b{*bZZJ+`^({R z0>pojn+*mN;Sdl60KSY8JLR#z3_|H@7=R^2aDO-z1@GZ$U+;zGQbdDYA@J)wgPL2k z09u@MYRQO=4shE>6&bi-(dngN(ZT?d;{AIFfFlH>5c{!R;&0o7B{F>ev2QRo0|^7e z@w+Ri-p9wpwb*Vj64eep@p$e9OUMUsQH=tD*Se~zwDMwuY%+%zpsKfS;c>4XdG9E^ zvC~eNU-zjwMgI&P^{d3wAi3=w2Aq5HI{bzIl-&* z`G2ENVJ3$@%7F~!2l;&-w)#JTZMcvP9aC42u2a%Qe0^=guQ&$;;px;Ea{Z@iZda;6 z$H+wd7NA=l7S3}Ar{#7T``h-begV_ZwuR=>$H%#<=ErD?5y5CeZ?YEH)OyFy;H21q-?F8paNB1tf zN8;1>dT$qskmnu@%TBE?$8X0uE;ehXUEroGdCv(^4>TfwhL;bPENp6w^NXzuth|0B z*Dj%}O9I9O;nsm(l}>=qrYWq`phD+jXVj0iPK_S;ZWe5`+{SB%|1-zUodJgSgi^M{ zl9OQqh|t%kM{l%D=`U|jM?8x)k4yuvi<`9|VMn*H_sabt8&bm6kKKDDl%Aj%om%c= zM5&yP~`%8esL_EGJYt3N(Q|g?V@L{vm;ZaGgy~cZJjID|kAX#J`tl_G7gdn^-{v`WsJ%~XTF-aNzGh!EmhKzo`Qu0{=5O?I7FSU=#<)59 zI=E{E4}x))FX=Z3=0keF$Lytk4az^UFyU#}sJy=Ljq# zC-##;QLXlp@Y=Av@)C=ulvPA!Gr^B#1eL}<#B(xIhtpoajGUOtsB*+NNXKF z%V(-(q^GwUWr~Ep3(Ms|r9N(_jAz<{smb)sYOe~5XpIno5=3?`3y*Kkx@d~@j23~C z@x+FtaJ^GQGO@x7GfVZ`{nUtvlY`q@^<&x&sSSt6M* za39O}IiH8fGxu^sDWEdi_F zm_LKqu&<*^tU`oVcGc2OP?~_+J?-LHV;6ZOs!Y6^z!s*=LU}n{IiFWu=0~!Zb z7tCxYM*ya;8cun^9h0OzjYrZUA08eqe#Oubp3T_OzME)&xGbk75v_A($hCHY!6|6* zgHEnjRPy}bm$nI9jacua-a=vWz31g60&AUl#(9=6EXUrUP%95<45cO2`@>YeW~RLm zNOyF$fFi@>%STR@-Wjdm9|tsk0&T~;D)!lNWL@3eTn~*ZdAScAK<_t49R3GH97QeF zp%8*kQ^adA+fVdRA+di8XY-Z7XeH&~Uo(3#NYR?F#c5ZF=_aEe=GsU&ZA9o2C1tOLHKnTuoUx zPfG-{yQM>n)~Oz&d|5MG1M~^!@op=+OD+^DnMS;Y1>Hf{KWp(?vxCyEgE4Gp-?Uw`}g2n3$8!jXsJ*oZQtE~A+N@|xRq@v-dw4bJ4%>aEoQ~^!Du(> z7vO|0pvlE~|Gsv6Y1iY8t+A5L}B|HHvxWL|@m0Fd-(;#rU}A)y?sn7k7NR zf}sq{(Y%X{rGvN3b^srL4N_IW13h5s9n=@dB`qeX4@9ccjz3SO)DVs+5mSklw0@3$ zpe4S|Vqf%tHM(AYXsnod?$a$=_Lv)$3_RX#Yl@8FfJ5HZ|FSs5fBlfGg>W*tHLFri zNkqCuk!j;?df@Slq;~D-*>}5|$H1=FX?o9aN`6PEwET&@#`D9K^9Z298oK9`%y6}y zR#VO2v%JVZOvL$Jhj~m#XWf$+jo9)P92FwyOO^;fJoPZ|bE6)#$J2QlcM!w3UWF9J zLM2Yx?|n8N*pPnWVAjz8khOloI#euNV}y zJC;BY&u`DnILTl7UoL3$HQmil-kbrRS!9I+-sHm5>RnEyr%vH}!z31mcY2;~Auxu^ z9ksQXnq5Q=P*Rch;sbsDX}5ebDJhOL@X?11IN_t-7wK3RN_?X3GAMSM)0$z`(#ZsY z(pm+~oo=rlxeoJeP`hh4a&~4$hN5rKKP%2y?LdWGssXx4j9(OtLD&$YW?(y%jv=>< z1{~ATiavaX!$%FekMgzNj*i4HNG$5M8(M~0I*O2OMi*pjMBv+)O|Vv<>REb|y#om9CK`{c-}fi& zes_u%ZSEuCzNfZXuwjr}{CHI#cYDXa?>RKM|Ng!L)pDm2-RR*Xi7~k|+sBrD1hH27 z3&b)HEw2Y(X;KfJD+`_mm|t1qve&j(qFYo(B2q*;mMXZrc^;X^HE0))N@vG9PtA1h z@bZ63VBI=YwhfU0Et^L!@rQ2ocot)HLdO-zBGro5;0E>A9hp+%BDukIIyyQyoYvXD zg^W+vx_8pFzlRn=luB@th!nb{8;2gnj!{q*j5LHA69Mok3zv1p1e-F{RuJ|UK$1wy(`@;9E zPYV{y-66&%$c4#R;oQMMpCc0II`g~r&kRF$!9z(@#)k%n>VZD2_rG90kdm9P}|hPy3W2P1(BKs7;p#D(I`{hucfbp;8FdV?*t(yG2G8>ib@D zAh=9y9m|m%&Hq9gLd3hI6Ubq=_q7tZR)qvVx!y2t4X0VeC}IUj#?iL5JU?25;IR*V zd7k*C5awu10)(M{aWP;jhCXnWeHzZc>L-;viBAQ9E~<3@rHNI&GSP|!6kHCx;JZkO zwKqsNkn$coY{s96I1XjZtL(LM?Hx=G*${~Wd*&y)92%yR`b|~%KJ>O%62qfJ+j@F9 zP15mR6q{#xDbm{;=sYFqfIy+o%J!agSgeQWeyQW!BzL@^@YV2 z#Cv@At{`}e!vhDq)!4g!z&{5z!OjjHnBRncmW9w1ln zIcEvf1t=SaT=EqcbPx&3fBrr;-(HbF;9kU!Za9X?i$HOWdl&5F;u!d0(yEN+&$T5y z43210mlkTzgEddvNhAYDOGR=3IR&&il^4)PjN^`$=6WVxo=c&i&jqv=Ype}Y$3!mz z#FAO5XQlab3WxbuH*X-jd-zrbfyztVARlmO@3rlrhzV7ulvT(qHY3AJb2Zd=v9o>&?G+yiyNGw|Bh18|-( z-tpVH?)gQ|CX4;XNlwv*sT>92?p+{e0%Z*!O9f*pvh!}!%DA4xEY1Fgzi-h;S324Q z{a{M5kYb>|!iH7^h4&bYms9+RhKbKK*!ebAhqMbSKjQ0>76-1bR#r;OVi+7xm~U!O zoS|`i?(@ih)J4XJ1eDMgoMo+R9s;at>xLtU0HZKO;4hP5RCgAH-#2%Qkmvo~t zJUpDVcr958JK~>WSAYeCd3BX^0`>$RIfC{H}-jRvnI9;{QD8CA}Mf|(7``n;B z4!xP%%EcVL^4bV}>&S5G#=bu6wtPN!*^ha%A20*?9S&aGITEI4L#Pu4nKk}H2x!`3 z69E$hgxF}>1FH@=IKd}Zbe0b5^8`<@F~iB>N-}Ne9cbCHuWmh5`Jc4ROIMXVPaWy< z8yXP}BPD|idsAK!!1Qf1{1_?apH0~R!+9bqQUb2QSlJ?75qDjUREohwTIL-Z9UE7D zJ_wD;SAw|hcqj8zrh;zoU}3*-Zp_!UZ0J}w&M?E{LZ?O%B0BzA-|ZBg!c45K=>`fh z>dEVL{J!F#Y~iABimm0g7UP+0}dpR*nlO(QRc0hi>RE z6T55*C1sq#vS(wDeSPDpkIf5(&@1H>P`8w_4|`2P^XBs8P-QNQn@`QX4NpK)^=?ca ztLGJEO>l(@CnL&z-4_IJb=%fs51UWT&j$qKxS35ww}pnd&^Tvqx?FY_<*&LC<{-WC z=kVucB(tk$2x!Vnv3eeoy${~plXN>YA-3SphXw4aCsWdXbU>Y3QgNx7I29F38p64o zcvES<;<-Ju@<(>UZxZ(gn zyAtVn7nV;&*_d;AYNwHWayBsEITkmr@x}Wg27k!RXDT!Wfaf|Fx&QnQ$@RHTaQV~H zZ?mzyd9SBh`{*DYd5uN~qgGC|6((5~X-5ky?cpH$Cr-2)CoFWFhypUH`4tute^An4 zlpk462E%R7noI6F;ogZ=cSROK^wh{T3}^Ogj$BSt-lrDqg{;~zElzLa!V%%DP;95XS3*lLf%s@+GCc5CDXs#};i9@R)>{Ql z7twD{@Zlk^quxZ^1GER94#_Jtp4r66`ccT=d>^I9fd2ssv_@on!ijDqL}kl{+(>Kf zw=vMI(YuvleBC|F*P`SwBF>aWS>fF9v{vT%rE$pZf~lMSql4NRrD&UE?-xdHk54H= z1p?+M+uqfS*T}J_y@^{u-4+X80ISVC@p}fueo~CqE6NAmH6Vul$bvS0&yur5KVmLE z4E)`)7+)Qx?CzNK*l<^8*oTcerLmtcsA6GZ`o`X<7u-u#WQZlr`#*&L5`?F$bi2stKLJ?e_G8Dj z)~R-7KF>LL)>G2Qhe`Vf;Lp+dSo75P80I5 z0)d+$nW7dn4v=1Q3)=t_h7f}5htpnI#KA5ixIu*je|%d$wYCPf$e%hWGjkdSrPtka-8UwWSyTs4oW@*w>Tt7@m+=<6LIPJJj6xZu4x1bUB zSVaU=X*YNE#!9XDmsG!}3<+letmD(#g3~`seq$4X3J^Jg(261*pDmTwqgenaM#=L_ zN;zDXfLjfzW@1cqv^PNOoL|-`Iv>fPYdxbO!hG~tP}@Km37zEzdh3x!9LWrpXfWFd6TEOCa|O`6=u7BTpW{baJ<^GBgolzn5fk zFp&qHo{WesC%67wh1g3d7B9!|4t zJYRgSmR{4vA!rgxvY5 z>Bar@QTKmbW%q}uRQWSs4Hh!ZJ&A60ST+g|94C^r6gC32%*vQ1rFEIyuoorX_ zY3O-r`pT%z6U_Cmhu1PNj(4bY+?sftKOpwk^xTGL*grcNlxGdLl04y88y?4aAXV)$ zkDbHK^EQ0CD@Cu}fKFsJ@!L*yLBR*w_z8gYQ`H;*GSUE@4C_G7+`)`Am;vAgy4gyy zD7x3ExBcA*ii=wt6(xf4xBdl@1r^eW_>LNqTn-Y7q$pmv)4*?tBhMrW!e%p8S){3< zVRqT_^v2yb#z>7JCT`ZSi$0P?8>$;s3dQw{zKQWEebG>&_hFkBSrjW|mVtDaMxcA- zPuispm$L1F$sIeheJ17)=n7+zR?lWAEiQ6pjy%)!^%+zCHoE$ z9Gs$FuPCp3gvmTHjI_Dt%rqIp7?j3xQd|+-jye5!cA1&ndA(qM6?oUY^NTZGD@LSo zqmnG4U?`!ZJeS)pZY;OkY=B>Q4dS~Y$J_x;+Y$R&=+&7!OkL%6@On+#=^sa~ePUZP zJye|9Ba8<2QR~tq<8D;$;LltFF8jo6>exi3+>v3^D1G`5A=f$`Yjxcr#D9u2(B+^g zAbEt>FO22w^eh!cJXe3Hx~|Sf0`VfEF$}{OF6Rp)sZQ+v-_Oi-z8{&%vjt30F+sy* zeP1Jo6JiGRZSn0)&kQuDV0THD6QRz%VWo7I#ELuy4x={2YgEFJwKd)E1_pis zl%ECtKvZte_scbjx0@iXwe@h`?oY>!7)ETt>=lN?A^-#-2jE1Zc-UhQBf7P@B!JfhwqZvMO{>&6yorINjg(@)@ zf8}AZ;W~D8;{#opJ*e448NMR7QlwvpH$M^`;e&@hzZR4$?KSRynn&Op#;|Db1_Vh* zT7p_n?4&b!(G%BiCO=do+n!?O<7vLdgb~I773oV2uq7HAU}w7-pqJ#%Dqif!V2xH# zt;--w@WFGyoeaZaanOIOU8z;5`>qcY-#2OhK|*70IN_#~>>>S7kwaF)!ujYe&;7)s zA)lv|>u2;E!N{jnDr)OTC$wI5uK@oC=b_ZDk9T;Fn2*D&K{pe_k2}W3Lv!Nk;?WfG zAN5{yjUH&ELY@yW5Bmf#Myd_2^#j!O@TrhCE3J@#2r=?9KszjkhN=D46W)oKB?CH! z&lXxp<)cmTAX18z%rqNNu-e*k*tkdS@~&c*GPK8!PtMaSS?Mj_^`0<1m6x-?3J@>; zPSOyN+G~MOkR@!i7X*H+ChQ5q2ejz3fFhbHsdylb3KK`_YeE%Fuh%p7`m znMq$lTRcit1iW4Y*Zk|iln9CQ`Cu|P%nXd+Zrhr@)vhIac$M{Gcw>ZS3uqSO6cr6d zVGj=ubCTYZ171@vu>v$KPGLW)RBOS+tBifs0v^Fa21VO`Vv3at-+_I6Uar@J;`(&E z4XNXM{>@?04rn1qIY8}T)^eN*Ie=aNo(mO%z&PX}Fb;k>KltT^|9Uy5wqqZ8Fe7Wj z+dpI~Y3nS~JdtdPMPB+}E)z1Zq~Rx&p&lx{uJJ5o6ia`2D0=>)=BFzKrcaQfbvaZ) zUVfy7Hzix7KbS11UPK)`2JbM-w7GaL%a1Pt(MC-0YAcf1St)=!PK6$4`=F+hY3 zjExda`tM$#r~CVPb(I$BQzg)QRFLdwLN9vh}a&<(+Yhmo!bP(_X67SzZnG@mu^PNJ1D(ArC!8=3|*dYpvKh-qoQ`UNoqu!{3%KfhDxxv@doqYs5&L9*9efl5<8P$Vhee z%HTn#LsN^Tvmr3PDp%4wscQ8L?D)+yCiQRwsgm*uhs=AW)$c=mV{`t`CfLl9{^L3m z2`<8?O*115Y&FH*RbIV6rCS;3@8t5c62-dmw2hA#E3JO@t2^VnENOZhP90g+;idcm zUm+!sPxV=EWFBe9nsyqMX_Z?B^u_k4>ZOR&O5ciJHHKpwY-g=mNaH$GEorxGD}TLv z7B4>5<~B)3V5DxHs8CjG$b$ai=a~dY^7kYcLrD#OCM^amF(moO2>gTyB!&K-1d=2a z0!6N_9vS58Q=CXvm_Mi3r%S;t1rtc|JNr;;F0y<_GvA+S6oNWn!=bE}1@G+#O_Lmm z$_eBB+UK6+BQ2|keG9IN7&*UuAgstP_Jj8@F*n8S!X9hJn z=4)&zvQgs9A73@XnVeh5T4^aEbA269DR>w$yr!JdKmL$-eI${c%5f}wOz_C0JW>>0 zC|65CpqeDO-6~YC>_we9^zJR;!1fv>!yjDUS`e$t-bya*_oCvsCK;WU6YMt!ILJ+*MKjZki(UEiA3cBYG9w(6#&8X$f$Rr?oh8Rnz86=iCJK> zDmN?~?_>2<@Osxh$^$<*-mNx_*0~{?*!vA{cPZc3=<$4fW5EIon`NNC9#`E{_Sn?1 z_EB#6T4A{&&H}kv0PN_r#Y`k*RPcVcM}lWm z5KCUYr8#XHkL2F-=eX73VY05lbH5{|G=x(lyoZQpR$5W{oKpd-kd&ypz~ApGF?4(4 z#E*sL?yPa+qW;KT^u{~O@iJ%FYCFJXbV&_G#5DLiz4)4FBeItNtQ5h^#C^~8S%f)TZp*yKevbm^p89UJqEm0Oj4Es z-vtjSG=rA`%t9Z#|3n1 z(=@U49I12T4;XY!i2{KP*xesCx2PhK(KBuiS*DyQw}Zbnh!u{oTFD(@tSslc%)_hcIjj{-#>Ub%`(6p&R=DXPE$j%Pwa%|t zlnn3K zKcOL97C~@~Z3!eB-VCRL%*GUBQtyld8ST`=Hr*L!N`n~rb|Gn#xNtuw^p5LMVae=S zz$1|CSz_eyjCb3ox-kU_RW^vpAzsnUpinMDqnm6+s|fbJt)}f4XjU{v?|yc8ZB9be z?A_84fuyb?jvo`MdTsyn_(UD&@&>`gUi@>QDJNMuE2$S%Fm$E>*=R_?FP5x6e=|hU z(GXe#Y36!sYq3fbKW}vd5>gLTYWdR7lpB4BCTd+A6|T3A{ZQ8AJ8?9uc*^)!Fh9KRk>N@ z+3K8%YRl?F*Bs&gRdCDP(y@xoR}YDF`ZxK5Py=4lw&kO0SaJu2+dGDlquW39DEyG( zy`e&yvh#8KP^ewr8!nRBX8(co;-{*Mg>=5Pn>7>5R)`>U;DmuEGdNg?2sWIWXNJ!v z$g|(pnK0G6MMZ8D<#l3LOJ4MUSO~2&6@A^_6Un}&V_Lc0MC=tAhr@O z2<3l)J(B_on^h0R<$&b%|L8EX?uGmQV5eEN@Fcjib_Je;BzZ=|`u3WmdUI61pqR}C zcLvrM!2|6S1E{WPSPnR0OM^t@tj3Z1`1(^^Xlwf+zjph=1>L1vl?{gb`K+?hQq0^^ zHn;h~JYLG9XlIH zh{A~^v;J2&Tqdll&^XRSHJdu8bHyAK8t?|0*U{|R=6*(dv5l1WTRI2KTc1E7F#DA0 z+*O0$$E%hh$f~Hjh^8%&0}P)ujV%NJMiv9)?l4u(d4rELFH4bX5W6u}6qWww z{VM}B?X}aBHR0NnIPI8}(^gTL@u+ZGFoCZ+{xU3_D4WT1_*JS z5_Bfs7Fu2eaeVvifTrB(&^cIh-4z+4Jtj{Z)0*r$#ct^Kfhz1tlg}(=v;@Dfuzq9*f;j7GcP+JBKdusj$I~RZ-S#wct<=sw$H25L3I4 zP*6h&j`8)tRODn^bkM@<3?>XRThAl+4ZGQTlF!^~gqOBgq&st&zqRn4dCRc<)jvte zdSw;&qiG+E2PHouJ0si>E9{=?CKHPXP~4B`6SXYFU!`$YGZQJ?8Ud=0_{_>h2N%N; z$%?f}S0$0ELOQBGr=*$we^gx?77;6(f{+$mgNrv-2wmMbSQ1%`by+v(qq1&pE|F)f z#Bx*0IPtaS)b&3c7LWM_#%0#V@APePRZ=1zz7}+;aSeT-%xzN>|6aEjdZF_eap8Ss zM0!6SvFLE4A?569tlcesmTsHP_eXGi(EMFF|v80TG|>n6zeRDTfQ;c9f=sp z5iA#{g%S|w@bX*?N_!PA;1U9jZElqk*8fJPFZrjCs)AAO2xDTxD%~Bj8P2_gX88!rX5~CN zPqul@XVYj`d{ASgsku{a(KlK#kkjCfKuPesa%FE*TGg(4@#eQy}6qiIHfEceO9*(u8>N))eXkdP<5DKx$-t;T(5 zcWoulltDEt`)Ht;?c4AHPcM)Rjx(POjznt*qQR=YX59J-X=V>3HSa7>AElhveUtWl zVLP9zKabYE5ZySIkyL`1V{>37(J<{&c#jK?N$yDG_LG^0GfGNO&pl=3XGzPxUSxCYT=>4UOHSU=6D7=X4 zt%T)`g;vLPiqei)zvw|Bw8>6@sf#6{Gyav;U1)Ww6JF&xktqJ>*?{b5NQK>vT(WuJ z8t5)^o=Q_nNqH2#*?=CMV^+Kai<22MkIA?3?yfmq9F{vs&GWx7jP&1X`2UW0nDIaC z&8?Y0<|0h0JDIHgNDytdnFD=@T4DLsFJ)PFSw>xDd4oJ9?L5xm2&=_l$x@38>XMOOcoVk}U-VyBbtC=Rs?HrTTM z^g3cD71f$eb_*)XxMBysQk6w3rwi6%)`#${YG> zDZU>2t5n8&_K`sK{X>P2%wo{cE(uzgtWtSFuA3oB`*b3Opnou+e{rFx=sdd*v*k2UaZC~50G9< zgadc8aFvdwB89h3hWW{*P8u;#{KZEO*S-uLMp z9;&!Z`gMTR0_fpYr^YB;D1FRIc%jWn4PKrKRNoVFrI3D8lNjY)z3K9YUDev-YLn1M zF4KnV8=eQ*qi?1cM2n{Cw{R;+Tu?KF+3IZXOtG8QJ)Qb%?%4IJY$%Z9Jx^anKk5dW z(azamq& zenm*a0&d0h=D(hz)<5nIv}(e!H_{uQ1ZFy?#RGG;KgUQNo5+UY)r}h%yvg*X49PtM z!^Yc+Xhc!dyB$)JZlfEq*7APiL)O*|Y7I9NU|c4VcqCI8@ta+2)AwwHA4Sb-pZ{P) z@Dk4!th9zn&s=QLC%5b^pQc?u<7*h(D5S^7U4)!7?EY%D&o}&=P8Nnw=CVT|Cnv|G z!|E-Cl7jFR0n#vlyPxbWZSelTR``em_U!+@!o!2%NrMS#<7ds53&1%aay56F#X3Ug zHPBc+E7v$navCVNUam~oOtv2n?*=b1E)*c?A_(Y>o8*@NDA9+Y`-CgiPuHi(bMTEB zdDt|}QABQ5_s18o3-OiN>wJ579BsQxu|OCmo_ck>9ef?wL796?{9}L)@)%4x$h{rI zg2Cn|)-`vK)?#k)ED^9mvqz2D8moPh?&t2cOv&sE-0TfAwaGUQ6{nAupbgO3>e+9N zGwbAY$vN761Lpojr`Zy4=ABg*jOS^ii9EGTxgzSS>*-n}xLfyM8g;nDxo&^D+0GDX zY}VmM(5uF$tUgq<0EWc!4eEhApbKQt@>nhL20%s7dFYCORJ{h}3S0i$zu9>6UMM8q zYq3`ltBRUD%@$j93@r)Dd+cTgPI)QE37{Buv!U8?{}`*ey5t3$yNF8FToR|8M&_ab z)IT(45iIw%b7XXv2~L9#)>?wVy8Vdb12`g!k)2YW*-ff3)sn!FLHg>Om1B{{)1w4t z!-56CIv0e<5dhh0IS@S9Xk))5<^AYe8EI-DJ9r24?KnHizU=x6MbGLN1O{Tz9vH9Wl590&d`T26zJZSC zy4N;w>QEhtaOg8FfFm%!9&ml93|@Uk$fbBtcz)b4N>1hrDD|7Tb-C*%-+0NEJ#M)l z0O$tKzc7Gz#1{Z6$^Yk2O^o_$A|{%l#BD5ES4{rQ{ec1O=lo6R7rd(nx92~2S5@Qe z+~>bTEhcGQ-oGs!-u9l}@8W&FmEF%bzD>m{>@I-7po!WO1&>?2^-xgp#i1>S8UW1V zJ{gT!C3xchLO%dD14f<{DI-82WjjiGLVz-uc7Gs&d9=>P@T6HMmt#1y3GNdAi~-{R z8{z|g>dPy%(d8h!vooxKA-_WcLxU(U(6O?TX97?%qnL8TvOiV(?_dAdh$aO+4Q+(# z3-0gh==p<$w2r~|_%VE~Tki|7SO}qTtc7}*{y+a;04|W1)%BAn0RJ{Nd_b9QwZ`9% zSA)TcP6Qw2e@6B9H332Z{3d35kqZ3yG8K#lioRqQXh>VZ(o=xYQ&|B8C-vAeDr*2XcfDElcic{K0MwWgW|WVv^P!}w zG8B8jiw*;2P7?6qcPhff*SCt!|3yUqGpao%F8~YH1xT-On7#+tQOjjFm)(?`FLJ$o z`xcC4N0uw?EuF6S6kFHBTjZR)c(YvKX?1^r3JW3hj@*MFip-=uQA^l&qD=tAoORijuwOSQk|(ID3zMzf$Rj?WH>NC zc2VH@S$~JJ!NDOnn~ zvV>hp$H$Eu$Yzrc2uk`_Z7olCTp}R}{uX`4qZ+7#?Fkh0-X4e zUo2v12qQ-8Rds&~>6(H<*S;zdIIhH|*2IM8P#14CCgk_TJ#EJdsehtAP=BP7PYW;3 zXSAF$aeN3Xd_26$tgZD~3mwhXz`L7nzQX+e-tH9k=_`yk{knMiJD*y_G}6PVNKAL7 z;yYRXrH+~vEstftFJA^cf5|9e9@H89HI6Um2Ljxm5`xRzop>9SnE0;hhGa*@N43s6 zhZSSX7hAKnK(TN`DOLcu2z+D_0bE;d8hnng{uPxs!!uI63UhGUf!RQAAv6@}Ft+R8p1@Spd1Aa`J)S6138T#hYIi)J-JLki%~eBk^axuE{m>aL zl_19~8W4!+-+6y1eH1)-)#MkoObpq=bBv4sU;={{duw)gDxXO&Z8$yS7d)=5#<_I5~}!?2FyK?4xkJse2MLolVK-pP_QE zOT8A}5eo3o(6IAVdy%&PmGC+wf)fKf|S%@_EB;t@HKi`uKx28Mw0K zJx|!`aXg{I7IPD|X@!Ih$lJVsI$9~GVfF=JKmYzt|5O1K@UZhHW!5OI$|^61uX3w_ z66hv^mLg{rb_k3OTS$41#Sh#p2)d=%-QFFs7W~^%P`bL`G_$(zIN;mjBwzvOFP#T10#&&}_T?HzR`pzkyt81s zSM|1R6>UK~8MVMYfaEm_kGHB64Qa9v!=_zK^fwwo;XHoa`iP-x} z$?eZ^NV--jHW}Fs_U6b~9*gQ7859Bos60->$*LO<*0`Pbxg5%^dm|~Fm4$wjhU1lp z0Srvam*rofgO6qp%BS-;rI0PwXo}fBClEYC1U@}exb4y3Gs?CxOimV>QXq~E#Tsmi z$dheP5p}my`b)lZ#@4)9Kf?Fj2bp$Lp$iJo>n*4H2i#k(4NcdftKCgB!jzOLC8e}= zi$9(W+^-t&+O;l(GOQ|@*rR~1MzvHKyNrcg$|kZ zpjx3@CBx@fV=W@4MUuFuWcTwEsP3EcT$1%!g@Mg{vtU-p$byrVWkQEF%j!u~mAVc$ z`w|vTrD#*qUi1i~xqxjUgR?ErZe~-?F~d!VZqpvRVi~bnNaAH9tK7iQGy5azWJ>i! z{j?e`i#e~YjhC8&1E}?06kY{C0yEkM2UL+WVz;{SbpJbytQdoL)&tU|a|2RNSVBj} z?Zjpwqj4VtY#WxB*7(h<-9Rz(U2!ns{L7Ptzl`yF`V}#{;=ms969Q_OSGduyk^baG?vrLOjlGpMOMo>3o`7oB?$?<%;b1^+FzN z@%Lw^2=&o^cMxs*zC}v8St9=?t$LrCF7$VO$v=-?t@#`f@{LVQKuaQun@qO!8qqah z;(9XC&*YZJB@Gf#2#%e4Z88MRSQTIKiUwLqB99dw21swk2OvGnchYlJvz^e~Y81mQ z=>7kI5^cRWIb+=tg_N+paP0K1wSFXK=W6~Tn)TRmQ=+Y^afIvuOP#^m8?OQgzBjbZ zW{k&Ii8&D;e6qIB0h!LneM)dsAAdlK6O(P5s#f09K5k+m_2XKqf338EHu)F zSgom@+{58o!&Gpr7=7T$IWQ(PXPW!l#B(!;ua$InQ$1(M!WS56F(P&DZr48hqJCFI zmG4I#`TTur?AJs6Yf*F=qXLOfVd-90@Td=Hml-Y5RDZv+vTkIqg>m*qM@E`$Zg<5!&X}zA)@!X?ROw^O9{{mES$7j@`T=L; z3+Xk7h$}{td*^qE-d8+8wM5jG0hr%CfA;M!@m|4uqFlA{&&sVg>pgYG4rc2a0sp#&@RI%@5Qw%W%gci`uKawrraZ}H%;i$U$mi8MV|`Sm zo|B0+B)Qy9k)CdRtMl}f?(DZXI%n{yyXzgNb@ur2jJ*kpbg=VzgA*a4!}la!P_jU6 z@YOXbtYv6PZy3YTefSx&jmK{733MD`sRoYNIPfFrr)Zr8&77&eNPl-KA>l2XS@kQ_ zx{VgkQ0!o~@2XOBf0O>7tGmOWXT@t%(R~soB2ekRD_Q&&z zMGyGVUl=D00ub1ZDY{nX7gnu++L@=xf^IEkm^p6E0%#|Al;q!Nh#>xa=)5wa+m{Dmi&RU zK_duz<|Wf&JL$2@W&0-t)i?Z`Xy&@^>~?|O&}H_P_fYnhFj3^NQ<~0miPyCW=PMVT zG+XZp&Q8airY!iL7gT8qepJenKvsGP<&^`3(iT%?e)7lH6LNf&39pLxU793KioF6M} zv$$2yYe7X_wQ&AJ?MOTFx?pCj)f@E=c@5Z?EqryyKYxUk)yFbc`4bi#m*a|?Symp# z?oo&hFG}y6C0y5q)x$qsjmJca=ju96RG>v=Av1jryH}d5UO}JIhxujdoAAYGW@fX! zff6gq&XGNRQ5u~wH*3D*vI4)H`AGRW*KA`insbs0ayFICa z0=crfJj%Zs0=A8toOWwTFN^5g27lB%t$M$LkrJGLeWq1;33hHMCHKG~@6CC7Ppfbk9`E{cnv^9_Um_Yh`vK zW}!SITp|^F4X`fxd0)8O`CA*710`qjr!&@fO|;*eQJ Ijl!q=1=LUw>Hq)$ literal 0 HcmV?d00001 diff --git a/img/react-native-existing-app-integration-ios-before.png b/img/react-native-existing-app-integration-ios-before.png new file mode 100644 index 0000000000000000000000000000000000000000..445dd790444cc3e836de7f349014a13112dd539a GIT binary patch literal 5409 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 Ae*gdg literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 95217c1c984..95e7f87fe7a 100644 --- a/index.html +++ b/index.html @@ -1,279 +1,58 @@ -React Native | A framework for building native apps using React

    React Native
    A framework for building native apps using React

    React Native enables you to build world-class application experiences on native platforms using a consistent developer experience based on JavaScript and React. The focus of React Native is on developer efficiency across all the platforms you care about — learn once, write anywhere. Facebook uses React Native in multiple production apps and will continue investing in React Native.

    Native Components

    With React Native, you can use the standard platform components such as UITabBar on iOS and Drawer on Android. This gives your app a consistent look and feel with the rest of the platform ecosystem, and keeps the quality bar high. These components are easily incorporated into your app using their React component counterparts, such as TabBarIOS and DrawerLayoutAndroid.

    // iOS - -import React, { - Component, -} from 'react'; -import { - TabBarIOS, - NavigatorIOS, -} from 'react-native'; +React Native | A framework for building native apps using React
    React Native
    Learn once, write anywhere: Build mobile apps with React

    Build Native Mobile Apps using JavaScript and React

    React Native lets you build mobile apps using only JavaScript. It uses the same design as React, letting you compose a rich mobile UI from declarative components.

    import React, { Component } from 'react'; +import { Text, View } from 'react-native'; -class App extends Component { +class WhyReactNativeIsSoGreat extends Component { render() { return ( - <TabBarIOS> - <TabBarIOS.Item title="React Native" selected={true}> - <NavigatorIOS initialRoute={{ title: 'React Native' }} /> - </TabBarIOS.Item> - </TabBarIOS> - ); - } -}
    // Android - -import React, { - Component, -} from 'react'; -import { - DrawerLayoutAndroid, - ProgressBarAndroid, - Text, -} from 'react-native'; - -class App extends Component { - render() { - return ( - <DrawerLayoutAndroid - renderNavigationView={() => <Text>React Native</Text>}> - <ProgressBarAndroid /> - </DrawerLayoutAndroid> - ); - } -}

    Asynchronous Execution

    All operations between the JavaScript application code and the native platform are performed asynchronously, and the native modules can also make use of additional threads as well. This means we can decode images off of the main thread, save to disk in the background, measure text and compute layouts without blocking the UI, and more. As a result, React Native apps are naturally fluid and responsive. The communication is also fully serializable, which allows us to leverage Chrome Developer Tools to debug the JavaScript while running the complete app, either in the simulator or on a physical device.

    See Debugging.

    Touch Handling

    React Native implements a powerful system to negotiate touches in complex view hierarchies and provides high level components such as TouchableHighlight that integrate properly with scroll views and other elements without any additional configuration.

    // iOS & Android - -import React, { - Component, -} from 'react'; -import { - ScrollView, - TouchableHighlight, - Text, -} from 'react-native'; - -class TouchDemo extends Component { - render() { - return ( - <ScrollView> - <TouchableHighlight onPress={() => console.log('pressed')}> - <Text>Proper Touch Handling</Text> - </TouchableHighlight> - </ScrollView> - ); - } -}

    Flexbox and Styling

    Laying out views should be easy, which is why we brought the flexbox layout model from the web to React Native. Flexbox makes it simple to build the most common UI layouts, such as stacked and nested boxes with margin and padding. React Native also supports common web styles, such as fontWeight, and the StyleSheet abstraction provides an optimized mechanism to declare all your styles and layout right along with the components that use them and apply them inline.

    // iOS & Android - -import React, { - Component, -} from 'react'; -import { - Image, - StyleSheet, - Text, - View, -} from 'react-native'; - -class ReactNative extends Component { - render() { - return ( - <View style={styles.row}> - <Image - source={{uri: 'http://facebook.github.io/react/img/logo_og.png'}} - style={styles.image} - /> - <View style={styles.text}> - <Text style={styles.title}> - React Native - </Text> - <Text style={styles.subtitle}> - Build high quality mobile apps using React - </Text> - </View> + <View> + <Text> + If you like React on the web, you'll like React Native. + </Text> + <Text> + You just use native components like 'View' and 'Text', + instead of web components like 'div' and 'span'. + </Text> </View> ); } -} -var styles = StyleSheet.create({ - row: { flexDirection: 'row', margin: 40 }, - image: { width: 40, height: 40, marginRight: 10 }, - text: { flex: 1, justifyContent: 'center'}, - title: { fontSize: 11, fontWeight: 'bold' }, - subtitle: { fontSize: 10 }, -});

    Polyfills

    React Native is focused on changing the way view code is written. For the rest, we look to the web for universal standards and polyfill those APIs where appropriate. You can use npm to install JavaScript libraries that work on top of the functionality baked into React Native, such as XMLHttpRequest, window.requestAnimationFrame, and navigator.geolocation. We are working on expanding the available APIs, and are excited for the Open Source community to contribute as well.

    // iOS & Android - -import React, { - Component, -} from 'react'; -import { - Text, -} from 'react-native'; +}

    A React Native App is a Real Mobile App

    With React Native, you don't build a “mobile web app”, an “HTML5 app”, or a “hybrid app”. You build a real mobile app that's indistinguishable from an app built using Objective-C or Java. React Native uses the same fundamental UI building blocks as regular iOS and Android apps. You just put those building blocks together using JavaScript and React.

    import React, { Component } from 'react'; +import { Image, ScrollView, Text } from 'react-native'; -class GeoInfo extends Component { - constructor(props) { - super(props); - this.state = { position: 'unknown' }; - }, - componentDidMount() { - navigator.geolocation.getCurrentPosition( - (position) => this.setState({position}), - (error) => console.error(error) - ); - } +class AwkwardScrollingImageWithText extends Component { render() { return ( - <Text> - Position: {JSON.stringify(this.state.position)} - </Text> + <ScrollView> + <Image source={{uri: 'https://i.chzbgr.com/full/7345954048/h7E2C65F9/'}} /> + <Text> + On iOS, a React Native ScrollView uses a native UIScrollView. + On Android, it uses a native ScrollView. + + On iOS, a React Native Image uses a native UIImageView. + On Android, it uses a native ImageView. + + React Native wraps the fundamental native components, giving you + the performance of a native app, plus the clean design of React. + </Text> + </ScrollView> ); } -}

    Extensibility

    It is certainly possible to create a great app using React Native without writing a single line of native code, but React Native is also designed to be easily extended with custom native views and modules - that means you can reuse anything you've already built, and can import and use your favorite native libraries.

    Creating iOS modules

    To create a simple iOS module, create a new class that implements the RCTBridgeModule protocol, and wrap the function that you want to make available to JavaScript in RCT_EXPORT_METHOD. Additionally, the class itself must be explicitly exported with RCT_EXPORT_MODULE();.

    // Objective-C - -#import "RCTBridgeModule.h" +}

    Don't Waste Time Recompiling

    React Native lets you build your app faster. Instead of recompiling, you can reload your app instantly. With hot reloading, you can even run new code while retaining your application state. Give it a try - it's a magical experience.


    Use Native Code When You Need To

    React Native combines smoothly with components written in Objective-C, Java, or Swift. It's simple to drop down to native code if you need to optimize a few aspects of your application. It's also easy to build part of your app in React Native, and part of your app using native code directly - that's how the Facebook app works.

    import React, { Component } from 'react'; +import { Text, View } from 'react-native'; +import { TheGreatestComponentInTheWorld } from './your-native-code'; -@interface MyCustomModule : NSObject <RCTBridgeModule> -@end - -@implementation MyCustomModule - -RCT_EXPORT_MODULE(); - -// Available as NativeModules.MyCustomModule.processString -RCT_EXPORT_METHOD(processString:(NSString *)input callback:(RCTResponseSenderBlock)callback) -{ - callback(@[[input stringByReplacingOccurrencesOfString:@"Goodbye" withString:@"Hello"]]); -} -@end
    // JavaScript - -import React, { - Component, -} from 'react'; -import { - NativeModules, - Text, -} from 'react-native'; - -class Message extends Component { - constructor(props) { - super(props); - this.state = { text: 'Goodbye World.' }; - } - componentDidMount() { - NativeModules.MyCustomModule.processString(this.state.text, (text) => { - this.setState({text}); - }); - } +class SomethingFast extends Component { render() { return ( - <Text>{this.state.text}</Text> + <View> + <TheGreatestComponentInTheWorld /> + <Text> + TheGreatestComponentInTheWorld could use native Objective-C, + Java, or Swift - the product development process is the same. + </Text> + </View> ); } -}

    Creating iOS views

    Custom iOS views can be exposed by subclassing RCTViewManager, implementing a -(UIView *)view method, and exporting properties with the RCT_EXPORT_VIEW_PROPERTY macro. Then a simple JavaScript file connects the dots.

    // Objective-C - -#import "RCTViewManager.h" - -@interface MyCustomViewManager : RCTViewManager -@end - -@implementation MyCustomViewManager - -RCT_EXPORT_MODULE() - -- (UIView *)view -{ - return [[MyCustomView alloc] init]; -} - -RCT_EXPORT_VIEW_PROPERTY(myCustomProperty, NSString); -@end
    // JavaScript - -import React, { - Component, -} from 'react'; -import { - requireNativeComponent, -} from 'react-native'; - -var NativeMyCustomView = requireNativeComponent('MyCustomView', MyCustomView); - -export default class MyCustomView extends Component { - static propTypes = { - myCustomProperty: React.PropTypes.oneOf(['a', 'b']), - }; - render() { - return <NativeMyCustomView {...this.props} />; - } -} -

    Creating Android modules

    Likewise, Android also supports custom extensions, the methods are just slightly different.

    To create a simple module in Android, create a new class that extends the ReactContextBaseJavaModule class, and annotate the function that you want to make available to JavaScript with @ReactMethod. Additionally, the class itself must be registered in the ReactPackage of your React Native application.

    // Java - -public class MyCustomModule extends ReactContextBaseJavaModule { - -// Available as NativeModules.MyCustomModule.processString - @ReactMethod - public void processString(String input, Callback callback) { - callback.invoke(input.replace("Goodbye", "Hello")); - } -} -
    // JavaScript - -import React, { - Component, -} from 'react'; -import { - NativeModules, - Text, -} from 'react-native'; -class Message extends Component { - constructor(props) { - super(props); - this.state = { text: 'Goodbye World.' }; - }, - componentDidMount() { - NativeModules.MyCustomModule.processString(this.state.text, (text) => { - this.setState({text}); - }); - } - render() { - return ( - <Text>{this.state.text}</Text> - ); - } -} -

    Creating Android views

    Custom Android views can be exposed by extending SimpleViewManager, implementing a createViewInstance and getName methods, and exporting properties with the @ReactProp annotation. Then a simple JavaScript file connects the dots.

    // Java - -public class MyCustomViewManager extends SimpleViewManager<MyCustomView> { - @Override - public String getName() { - return "MyCustomView"; - } - - @Override - protected MyCustomView createViewInstance(ThemedReactContext reactContext) { - return new MyCustomView(reactContext); - } - - @ReactProp(name = "myCustomProperty") - public void setMyCustomProperty(MyCustomView view, String value) { - view.setMyCustomProperty(value); - } -} -
    // JavaScript - -import React, { - Component, -} from 'react'; -import { - requireNativeComponent, -} from 'react-native'; - -var NativeMyCustomView = requireNativeComponent('MyCustomView', MyCustomView); - -export default class MyCustomView extends Component { - static propTypes = { - myCustomProperty: React.PropTypes.oneOf(['a', 'b']), - }; - render() { - return <NativeMyCustomView {...this.props} />; - } -} -
    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/js/scripts.js b/js/scripts.js index e59e8c1f4a6..52858cf703a 100644 --- a/js/scripts.js +++ b/js/scripts.js @@ -7,10 +7,29 @@ document.addEventListener('DOMContentLoaded', init); function init() { - if (isMobile()) { + var mobile = isMobile(); + + if (mobile) { document.querySelector('.nav-site-wrapper a[data-target]').addEventListener('click', toggleTarget); } + var webPlayerList = document.querySelectorAll('.web-player'); + + // Either show interactive or static code block, depending on desktop or mobile + for (var i = 0; i < webPlayerList.length; ++i) { + webPlayerList[i].classList.add(mobile ? 'mobile' : 'desktop'); + + if (!mobile) { + + // Determine location to look up required assets + var assetRoot = encodeURIComponent(document.location.origin + '/react-native'); + + // Set iframe src. Do this dynamically so the iframe never loads on mobile. + var iframe = webPlayerList[i].querySelector('iframe'); + iframe.src = iframe.getAttribute('data-src') + '&assetRoot=' + assetRoot; + } + } + var backdrop = document.querySelector('.modal-backdrop'); if (!backdrop) return; diff --git a/movies.json b/movies.json new file mode 100644 index 00000000000..fd48f44a9f5 --- /dev/null +++ b/movies.json @@ -0,0 +1,11 @@ +{ + "title": "The Basics - Networking", + "description": "Your app fetched this from a remote endpoint!", + "movies": [ + { "title": "Star Wars", "releaseYear": "1977"}, + { "title": "Back to the Future", "releaseYear": "1985"}, + { "title": "The Matrix", "releaseYear": "1999"}, + { "title": "Inception", "releaseYear": "2010"}, + { "title": "Interstellar", "releaseYear": "2014"} + ] +} diff --git a/releases/0.29/versions.html b/releases/0.29/versions.html index 10d014c6553..9f5a959bba1 100644 --- a/releases/0.29/versions.html +++ b/releases/0.29/versions.html @@ -1,4 +1,4 @@ -Documentation archive – React Native | A framework for building native apps using React

    React Native Versions

    React Native is following a 2-week train release. Every two weeks, a Release Candidate (rc) branch is created off of master and the previous rc branch is being officially released.

    masterDocs
    0.30-rcDocsRelease Notes
    0.29-rcDocsRelease Notes
    (current) 0.28DocsRelease Notes
    0.27DocsRelease Notes
    0.26DocsRelease Notes
    0.25DocsRelease Notes
    0.24DocsRelease Notes
    0.23DocsRelease Notes
    0.22DocsRelease Notes
    0.21DocsRelease Notes
    0.20DocsRelease Notes
    0.19DocsRelease Notes
    0.18DocsRelease Notes
    © 2016 Facebook Inc.

    React Native Versions

    React Native is following a 2-week train release. Every two weeks, a Release Candidate (rc) branch is created off of master and the previous rc branch is being officially released.

    masterDocs
    0.30-rcDocsRelease Notes
    (current) 0.29DocsRelease Notes
    0.28DocsRelease Notes
    0.27DocsRelease Notes
    0.26DocsRelease Notes
    0.25DocsRelease Notes
    0.24DocsRelease Notes
    0.23DocsRelease Notes
    0.22DocsRelease Notes
    0.21DocsRelease Notes
    0.20DocsRelease Notes
    0.19DocsRelease Notes
    0.18DocsRelease Notes
    © 2016 Facebook Inc.

    Apps using React Native

    The following is a list of some of the public apps using React Native and are published on the Apple App Store or the Google Play Store. Not all are implemented 100% in React Native -- many are hybrid native/React Native. Can you tell which parts are which? :)

    Want to add your app? Found an app that no longer works or no longer uses React Native? Please submit a pull request on GitHub to update this page!

    Featured Apps

    These are some of the most well-crafted React Native apps that we have come across.
    Be sure to check them out to get a feel for what React Native is capable of!

    All Apps

    Not all apps can be featured, otherwise we would have to create some other category like "super featured" and that's just silly. But that doesn't mean you shouldn't check these apps out!

    AirPoPo

    AirPoPo

    iOS · Android

    By DingTaxi

    Azendoo

    Azendoo

    iOS · Android

    By Azendoo

    Blog post

    Blueprint

    Blueprint

    iOS · Android

    By Tom Hayden

    breathe Meditation Timer

    breathe Meditation Timer

    iOS · Android

    By idearockers UG

    Bulut Filo Yönetimi

    Bulut Filo Yönetimi

    iOS · Android

    By Macellan.net

    CANDDi

    CANDDi

    iOS · Android

    By CANDDi LTD.

    Chemin de Fer de Provence

    Chemin de Fer de Provence

    iOS · Android

    By Actigraph

    Chillin'

    Chillin'

    iOS · Android

    By Chillin LLC

    DockMan

    DockMan

    iOS · Android

    By Genki Takiuchi (s21g Inc.)

    Blog post

    DONUT chatrooms for communities

    DONUT chatrooms for communities

    iOS · Android

    By Damien Brugne

    Eat or Not

    Eat or Not

    iOS · Android

    By Sharath Prabhal

    Emoji Poetry

    Emoji Poetry

    iOS · Android

    By forforce.com

    Blog post

    Fixt

    Fixt

    iOS · Android

    By Fixt

    HackerWeb

    HackerWeb

    iOS · Android

    By Lim Chee Aun

    Blog posts:

    Hover

    Hover

    iOS · Android

    By KevinEJohn

    Kakapo

    Kakapo

    iOS · Android

    By Daniel Levitt

    MaxReward - Android

    MaxReward - Android

    iOS · Android

    By Neil Ma

    Mobabuild

    Mobabuild

    iOS · Android

    By Sercan Demircan ( @sercanov )

    Nabava.net

    Nabava.net

    iOS · Android

    By Ars Futura

    NeoReader

    NeoReader

    iOS · Android

    By Neo Nie

    passpoints

    passpoints

    iOS · Android

    By passpoints.de

    Reach24

    Reach24

    iOS · Android

    By Spritle Software

    쉐어하우스

    쉐어하우스

    iOS · Android

    By Dobbit Co., Ltd.

    Spatula

    Spatula

    iOS · Android

    By Kushal Dave

    TeamWarden

    TeamWarden

    iOS · Android

    By nittygritty.net

    Ticketea

    Ticketea

    iOS · Android

    By Ticketea (@ticketeaeng)

    uSwitch - Energy switching app

    uSwitch - Energy switching app

    iOS · Android

    By uSwitch Ltd

    Video

    Veckopengen – för barn och föräldrar

    Veckopengen – för barn och föräldrar

    iOS · Android

    By Barnpengar AB

    Video

    Vorterix

    Vorterix

    iOS · Android

    By Dift & underscope.io

    WEARVR

    WEARVR

    iOS · Android

    By WEARVR LLC

    YAMU

    YAMU

    iOS · Android

    By YAMU (Private) Limited (@yamulk)

    天才段子手

    天才段子手

    iOS · Android

    By Ran Zhao&Ji Zhao

    うたよみん

    うたよみん

    iOS · Android

    By Takayuki IMAI

    鉅亨財經新聞

    鉅亨財經新聞

    iOS · Android

    By 鉅亨網

    © 2016 Facebook Inc.

    The React Native Showcase

    Thousands of apps are using React Native in production, from established Fortune 500 companies to hot new startups. If you're curious to see what can be accomplished with React Native, check out these apps!

    Codementor - Live 1:1 Expert Developer Help

    Codementor - Live 1:1 Expert Developer Help

    Codementor, a Learning Platform for Developers

    Start - medication manager for depression

    Start - medication manager for depression

    iOS

    NYT: A Health Startup Turns to Consumers

    Taxfyle - taxes filed on-demand via licensed CPA

    Taxfyle - taxes filed on-demand via licensed CPA

    iOS

    Taxfyle: the Uber for filing taxes

    If you built a popular application using React Native, we'd love to have your app on this showcase. Check out the guidelines on GitHub to update this page.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/support.html b/support.html index f2c8999c012..80f77cacfc4 100644 --- a/support.html +++ b/support.html @@ -1,4 +1,4 @@ -Support – React Native | A framework for building native apps using React

    Need help?

    React Native is worked on full-time by Facebook's product infrastructure user interface engineering teams. They're often around and available for questions.

    Community translation #

    The following is a list of translated docs offered by community volunteers. Send a pull request to fill the list!

    Stack Overflow #

    Many members of the community use Stack Overflow to ask questions. Read through the existing questions tagged with react-native or ask your own!

    Chat #

    Join us in #react-native on Reactiflux.

    Product Pains #

    React Native uses Product Pains for feature requests. It has a voting system to surface which issues are most important to the community. GitHub issues should only be used for bugs.

    Twitter #

    #reactnative hash tag on Twitter is used to keep up with the latest React Native news.

    © 2016 Facebook Inc.

    Need help?

    At Facebook, there are dozens of engineers who work on React Native full-time. But there are far more people in the community who make key contributions and fix things. So if you need help with your React Native app, the right place to go depends on the type of help that you need.

    Technical Questions #

    If you're wondering how to solve a specific technical problem in React Native, the best place to ask is on Stack Overflow. You can check existing questions tagged with react-native, ask your own, or just Google it and click on the Stack Overflow answer that will inevitably come up.

    Random Questions #

    If you have an open-ended question or you just want to get a general sense of what React Native folks talk about, check out the React Native Community Facebook group. It has thousands of developers and almost all posts get a response.

    Urgent Questions #

    If you need an answer right away, check out #react-native on the Reactiflux chat. There are usually a number of React Native experts there who can help out or point you to somewhere you might want to look.

    Feature Requests #

    React Native uses Product Pains for feature requests. It has a voting system to surface which issues are most important to the community. So if you have a feature request, add it or upvote a similar one.

    Bug Reports #

    If you have discovered a bug in React Native, keep in mind that it's an open source project. Take a look at the code on GitHub, and see if it's something you could fix yourself. If you don't think you can fix it yourself, you can file it as a GitHub issue. Be sure to providing a crisp description and reproduction of the bug, to improve the chance that someone will be able to help you out.

    © 2016 Facebook Inc.
    \ No newline at end of file diff --git a/versions.html b/versions.html index 174fdc2971b..8f319238476 100644 --- a/versions.html +++ b/versions.html @@ -1,4 +1,4 @@ -Documentation archive – React Native | A framework for building native apps using React

    React Native Versions

    React Native is following a 2-week train release. Every two weeks, a Release Candidate (rc) branch is created off of master and the previous rc branch is being officially released.

    masterDocs
    0.30-rcDocsRelease Notes
    0.29-rcDocsRelease Notes
    (current) 0.28DocsRelease Notes
    0.27DocsRelease Notes
    0.26DocsRelease Notes
    0.25DocsRelease Notes
    0.24DocsRelease Notes
    0.23DocsRelease Notes
    0.22DocsRelease Notes
    0.21DocsRelease Notes
    0.20DocsRelease Notes
    0.19DocsRelease Notes
    0.18DocsRelease Notes
    © 2016 Facebook Inc.

    React Native Versions

    React Native is following a 2-week train release. Every two weeks, a Release Candidate (rc) branch is created off of master and the previous rc branch is being officially released.

    masterDocs
    0.30-rcDocsRelease Notes
    (current) 0.29DocsRelease Notes
    0.28DocsRelease Notes
    0.27DocsRelease Notes
    0.26DocsRelease Notes
    0.25DocsRelease Notes
    0.24DocsRelease Notes
    0.23DocsRelease Notes
    0.22DocsRelease Notes
    0.21DocsRelease Notes
    0.20DocsRelease Notes
    0.19DocsRelease Notes
    0.18DocsRelease Notes
    © 2016 Facebook Inc.
    \ No newline at end of file