From 4b71c265cb20d436ecd5d0af2ad56b71ad3d860a Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 14 Oct 2015 18:20:56 +0000 Subject: [PATCH] update website --- css/react-native.css | 101 +++++++++++++++++++++++++--- docs/accessibility.html | 4 +- docs/actionsheetios.html | 4 +- docs/activityindicatorios.html | 4 +- docs/alertios.html | 4 +- docs/android-setup.html | 4 +- docs/animated.html | 4 +- docs/animations.html | 4 +- docs/appregistry.html | 4 +- docs/appstateios.html | 4 +- docs/asyncstorage.html | 4 +- docs/backandroid.html | 4 +- docs/cameraroll.html | 4 +- docs/datepickerios.html | 4 +- docs/debugging.html | 4 +- docs/dimensions.html | 4 +- docs/direct-manipulation.html | 4 +- docs/drawerlayoutandroid.html | 4 +- docs/embedded-app-android.html | 4 +- docs/embedded-app-ios.html | 4 +- docs/flexbox.html | 4 +- docs/geolocation.html | 4 +- docs/gesture-responder-system.html | 4 +- docs/getting-started.html | 4 +- docs/image.html | 4 +- docs/interactionmanager.html | 4 +- docs/javascript-environment.html | 4 +- docs/known-issues.html | 4 +- docs/layoutanimation.html | 4 +- docs/linking-libraries-ios.html | 4 +- docs/linkingios.html | 4 +- docs/listview.html | 4 +- docs/mapview.html | 4 +- docs/modal.html | 4 +- docs/native-components-android.html | 4 +- docs/native-components-ios.html | 4 +- docs/native-modules-android.html | 4 +- docs/native-modules-ios.html | 4 +- docs/nativemethodsmixin.html | 4 +- docs/navigator-comparison.html | 4 +- docs/navigator.html | 4 +- docs/navigatorios.html | 4 +- docs/netinfo.html | 4 +- docs/network.html | 4 +- docs/panresponder.html | 4 +- docs/performance.html | 4 +- docs/pickerios.html | 4 +- docs/pixelratio.html | 4 +- docs/progressbarandroid.html | 4 +- docs/progressviewios.html | 4 +- docs/pushnotificationios.html | 4 +- docs/running-on-device-android.html | 4 +- docs/running-on-device-ios.html | 4 +- docs/scrollview.html | 4 +- docs/segmentedcontrolios.html | 4 +- docs/signed-apk-android.html | 4 +- docs/sliderios.html | 4 +- docs/statusbarios.html | 4 +- docs/style.html | 4 +- docs/stylesheet.html | 4 +- docs/switchandroid.html | 4 +- docs/switchios.html | 4 +- docs/tabbarios-item.html | 4 +- docs/tabbarios.html | 4 +- docs/testing.html | 4 +- docs/text.html | 4 +- docs/textinput.html | 4 +- docs/timers.html | 4 +- docs/toastandroid.html | 4 +- docs/toolbarandroid.html | 4 +- docs/touchablehighlight.html | 4 +- docs/touchablenativefeedback.html | 4 +- docs/touchableopacity.html | 4 +- docs/touchablewithoutfeedback.html | 4 +- docs/transforms.html | 4 +- docs/troubleshooting.html | 4 +- docs/tutorial.html | 4 +- docs/vibrationios.html | 4 +- docs/videos.html | 4 +- docs/view.html | 4 +- docs/webview.html | 4 +- img/alertIOS.png | Bin 0 -> 77677 bytes index.html | 4 +- showcase.html | 4 +- support.html | 4 +- 85 files changed, 258 insertions(+), 175 deletions(-) create mode 100644 img/alertIOS.png diff --git a/css/react-native.css b/css/react-native.css index 111ced51d76..af9dc958bbc 100644 --- a/css/react-native.css +++ b/css/react-native.css @@ -185,15 +185,13 @@ html * { .container { padding-top: 50px; - min-width: 960px; + min-width: 1160px; } .wrap { - width: 960px; - margin-left: auto; - margin-right: auto; - padding-left: 20px; - padding-right: 20px; + max-width: 1260px; + margin: 0 auto; + padding: 0 20px; } .skinnyWrap { @@ -363,7 +361,7 @@ h1:hover .hash-link, h2:hover .hash-link, h3:hover .hash-link, h4:hover .hash-li font-size: 14px; float: left; width: 210px; - margin-top: 5px; + margin: 5px 48px 0 0; } .nav-docs ul { @@ -550,7 +548,7 @@ h1:hover .hash-link, h2:hover .hash-link, h3:hover .hash-link, h4:hover .hash-li float: right; } -footer { +footer.wrap { font-size: 13px; font-weight: 600; padding-top: 36px; @@ -699,7 +697,7 @@ figure { } .inner-content { - float: right; + float: left; width: 650px; } @@ -845,6 +843,91 @@ 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); + display: none; + height: 100%; + left: 0; + overflow: auto; + position: fixed; + top: 0; + width: 100%; + z-index: 9900; +} + +.modal { + background: #F6F6F6; + bottom: 0; + box-shadow: 2px 2px 4px 0 rgba(0,0,0,.11); + display: none; + border-radius: 10px; + height: 95%; + left: 0; + margin: auto; + max-height: 620px; + max-width: 460px; + overflow: auto; + position: fixed; + right: 0; + top: 0; + width: 80%; + z-index: 9999; +} + +.modal-open { + display: block; +} + +.modal-content { + padding: 40px 24px 24px 24px; + position: relative; +} + +.modal-content iframe { + margin: 0 auto; +} + +.modal-button-open { + text-align: center; +} + +.modal-button-close { + background: transparent; + border-radius: 0 0 0 4px; + border: 0; + color: #555; + font-size: 1.2em; + font-weight: bolder; + line-height: 32px; + margin: 0; + padding: 0 12px; + position: absolute; + right: 0; + top: 0; +} + .modal-button-close:active, + .modal-button-close:focus, + .modal-button-close:hover { + background: #EAF8FD; + outline: none; + } + @media screen and (max-width: 960px) { .nav-main { position: static; diff --git a/docs/accessibility.html b/docs/accessibility.html index 817449e8248..fc1f91a9e4a 100644 --- a/docs/accessibility.html +++ b/docs/accessibility.html @@ -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.

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/actionsheetios.html b/docs/actionsheetios.html index 297f8c38b40..882d5ba4780 100644 --- a/docs/actionsheetios.html +++ b/docs/actionsheetios.html @@ -107,7 +107,7 @@ exports.examples : 'Show Share Action Sheet', render(): ReactElement { return <ShareActionSheetExample />; } } -];
Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/activityindicatorios.html b/docs/activityindicatorios.html index 3ee0933ad97..966f5ddeeb2 100644 --- a/docs/activityindicatorios.html +++ b/docs/activityindicatorios.html @@ -144,7 +144,7 @@ exports.examples : 'row', justifyContent: 'space-around', }, -});
Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/alertios.html b/docs/alertios.html index afe51450eae..b09320298aa 100644 --- a/docs/alertios.html +++ b/docs/alertios.html @@ -197,7 +197,7 @@ class PromptExample extends : '#eeeeee', padding: 10, }, -});
Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/android-setup.html b/docs/android-setup.html index 09774f6305a..ea2e822f794 100644 --- a/docs/android-setup.html +++ b/docs/android-setup.html @@ -1,6 +1,6 @@ Android Setup – React Native | A framework for building native apps using React

Android Setup

This guide describes basic steps of the android development environment setup that are required to run React Native android apps on an android emulator. We don't discuss developer tool configuration such as IDEs here.

These instructions only cover installation "from scratch". If you happen to have some old, outdated version of Android SDK make sure to update required packages to the version mentioned below and install all the missing ones and make sure ANDROID_HOME points to your existing SDK.

Install and configure SDK #

  1. Install the latest JDK.
  2. Install the Android SDK with brew install android-sdk.
  3. Add this to your ~/.bashrc, ~/.zshrc or whatever your shell uses:
    export ANDROID_HOME=/usr/local/opt/android-sdk
  4. Start a new shell and run android; in the window that appears make sure you check:
    • Android SDK Build-tools version 23.0.1
    • Android 6.0 (API 23)
    • Android Support Repository
  5. Click "Install Packages".

Install and run Android stock emulator #

  1. Start a new shell and run android; in the window that appears make sure you check:
    • Intel x86 Atom System Image (for Android 5.1.1 - API 22)
    • Intel x86 Emulator Accelerator (HAXM installer) SDK Manager window SDK Manager window
  2. Click "Install Packages".
  3. Configure HAXM.
  4. Create an Android Virtual Device (AVD) to use with the Android emulator:
    1. Run android avd and click on Create... -Create AVD dialog
    2. With the new AVD selected, click Start...
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/animated.html b/docs/animated.html index 621766c48f6..3a088eedf61 100644 --- a/docs/animated.html +++ b/docs/animated.html @@ -336,7 +336,7 @@ exports.examples : 10, alignItems: 'center', }, -});
Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/animations.html b/docs/animations.html index 5b154e3a131..b09a6b1de3b 100644 --- a/docs/animations.html +++ b/docs/animations.html @@ -362,7 +362,7 @@ make them customizable, React Native exposes a pop: CustomLeftToRightGesture, } });

Run this example

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

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/appregistry.html b/docs/appregistry.html index ae62103e5d2..ab1766cb917 100644 --- a/docs/appregistry.html +++ b/docs/appregistry.html @@ -4,7 +4,7 @@ root components should register themselves with for the app and then actually run the app when it's ready by invoking AppRegistry.runApplication.

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: Array<AppConfig>) #

static registerComponent(appKey: string, getComponentFunc: ComponentProvider) #

static registerRunnable(appKey: string, func: Function) #

static getAppKeys() #

static runApplication(appKey: string, appParameters: any) #

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/appstateios.html b/docs/appstateios.html index b43b3bd114e..6d7c4c46a7f 100644 --- a/docs/appstateios.html +++ b/docs/appstateios.html @@ -110,7 +110,7 @@ exports.examples : "In the simulator, hit Shift+Command+M to simulate a memory warning.", render(): ReactElement { return <AppStateSubscription showMemoryWarnings={true} />; } }, -];
Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/asyncstorage.html b/docs/asyncstorage.html index f7f970ef0e9..4bd890f9bf7 100644 --- a/docs/asyncstorage.html +++ b/docs/asyncstorage.html @@ -113,7 +113,7 @@ exports.examples : 'Basics - getItem, setItem, removeItem', render(): ReactElement { return <BasicStorageExample />; } }, -];
Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/backandroid.html b/docs/backandroid.html index 4e775b14f59..3f02dc8ac54 100644 --- a/docs/backandroid.html +++ b/docs/backandroid.html @@ -5,7 +5,7 @@ functionality to exit the app if there are no listeners or if none of the listen return true; } return false; -});

Methods #

static exitApp() #

static addEventListener(eventName: BackPressEventName, handler: Function) #

static removeEventListener(eventName: BackPressEventName, handler: Function) #

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/cameraroll.html b/docs/cameraroll.html index 041d932c38c..5ec152d8a8a 100644 --- a/docs/cameraroll.html +++ b/docs/cameraroll.html @@ -5,7 +5,7 @@ be stored in memory (and consume memory as long as the process is alive)getPhotosReturnChecker.

@param {object} params See getPhotosParamChecker. @param {function} callback Invoked with arg of shape defined by getPhotosReturnChecker on success. - @param {function} errorCallback Invoked with error message on error.

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/datepickerios.html b/docs/datepickerios.html index 88bbbe655f9..a2a82127946 100644 --- a/docs/datepickerios.html +++ b/docs/datepickerios.html @@ -158,7 +158,7 @@ exports.examples : '500', fontSize: 14, }, -});
Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/debugging.html b/docs/debugging.html index 8abf29325f4..0e645a7df55 100644 --- a/docs/debugging.html +++ b/docs/debugging.html @@ -1,4 +1,4 @@ -Debugging – React Native | A framework for building native apps using React

Debugging

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 to simulate hardware menu button click)

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.

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.

Chrome Developer Tools #

To debug the JavaScript code in Chrome, select Debug in Chrome 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 8081 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.

React Developer Tools (optional) #

Install the React Developer Tools extension for Google Chrome. This will allow you to navigate the component hierarchy via the React in the developer tools (see facebook/react-devtools for more information).

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.

© 2015 Facebook Inc.

Debugging

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 to simulate hardware menu button click)

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.

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.

Chrome Developer Tools #

To debug the JavaScript code in Chrome, select Debug in Chrome 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 8081 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.

React Developer Tools (optional) #

Install the React Developer Tools extension for Google Chrome. This will allow you to navigate the component hierarchy via the React in the developer tools (see facebook/react-devtools for more information).

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.

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/dimensions.html b/docs/dimensions.html index 0fe40653dec..f7f91be4690 100644 --- a/docs/dimensions.html +++ b/docs/dimensions.html @@ -4,7 +4,7 @@ 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).

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

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/direct-manipulation.html b/docs/direct-manipulation.html index daed215cf19..f632c208b4b 100644 --- a/docs/direct-manipulation.html +++ b/docs/direct-manipulation.html @@ -152,7 +152,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.

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/drawerlayoutandroid.html b/docs/drawerlayoutandroid.html index a593c331add..47e9f43b7d9 100644 --- a/docs/drawerlayoutandroid.html +++ b/docs/drawerlayoutandroid.html @@ -27,7 +27,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.

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/embedded-app-android.html b/docs/embedded-app-android.html index c0cf14b5c55..9d241b09027 100644 --- a/docs/embedded-app-android.html +++ b/docs/embedded-app-android.html @@ -86,7 +86,7 @@ class MyAwesomeApp extends }, }); -React.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

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/embedded-app-ios.html b/docs/embedded-app-ios.html index df8e245e47e..3af2fba499d 100644 --- a/docs/embedded-app-ios.html +++ b/docs/embedded-app-ios.html @@ -45,7 +45,7 @@ React.AppRegistry*rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName: @"SimpleApp" launchOptions:nil];

Then add it as a subview of the ReactView.

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

Start Development Server #

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

(JS_DIR=`pwd`/ReactComponent; cd Pods/React; 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 ReactComponents 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.

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 works from the simulator, too! 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.

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/flexbox.html b/docs/flexbox.html index 9690ce14ce0..235ed24c9a8 100644 --- a/docs/flexbox.html +++ b/docs/flexbox.html @@ -1,4 +1,4 @@ -Flexbox – React Native | A framework for building native apps using React

Flexbox

Edit on GitHubProps #

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 #

© 2015 Facebook Inc.

Flexbox

Edit on GitHubProps #

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 #

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/geolocation.html b/docs/geolocation.html index 5c3fa65a2fd..721b4e7cb6d 100644 --- a/docs/geolocation.html +++ b/docs/geolocation.html @@ -72,7 +72,7 @@ exports.examples : { fontWeight: '500', }, -});
Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/gesture-responder-system.html b/docs/gesture-responder-system.html index 59fea76a856..4afdf6b1ad7 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

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 screen
    • pageY - The Y position of the touch, relative to the screen
    • 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.

© 2015 Facebook Inc.

Gesture Responder System

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 screen
    • pageY - The Y position of the touch, relative to the screen
    • 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.

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/getting-started.html b/docs/getting-started.html index adcd234e4e9..101548dc945 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -1,5 +1,5 @@ Getting Started – React Native | A framework for building native apps using React

Getting Started

Requirements #

  1. OS X - Only OS X is currently supported
  2. Homebrew is the recommended way to install Watchman and Flow.
  3. Install Node.js 4.0 or newer.
    • 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.
    • New to npm?
  4. brew install watchman. We recommend installing watchman, otherwise you might hit a node file watching bug.
  5. brew install flow, if you want to use flow.

We recommend periodically running brew update && brew upgrade to keep your programs up-to-date.

iOS Setup #

Xcode 6.3 or higher is required. It can be installed from the App Store.

Android Setup #

To write React Native apps for Android, you will need to install the Android SDK (and an Android emulator if you want to work on your app without having to use a physical device). See Android setup guide for instructions on how to set up your Android environment.

Quick start #

$ npm install -g react-native-cli -$ react-native init AwesomeProject

To run the iOS app:

  • $ cd AwesomeProject
  • Open ios/AwesomeProject.xcodeproj and hit run in Xcode.
  • Open index.ios.js in your text editor of choice and edit some lines.
  • Hit ⌘-R in your iOS simulator to reload the app and see your change!

To run the Android app:

  • $ cd AwesomeProject
  • $ react-native run-android
  • Open index.android.js in your text editor of choice and edit some lines.
  • Press the menu button (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

Note: If you are using a device, see the Running on Device page.

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

If you run into any issues getting started, see the troubleshooting page.

Adding Android to an existing React Native project #

If you already have a (iOS-only) React Native project and want to add Android support, you need to execute the following commands in your existing project directory:

  1. Update the react-native dependency in your package.json file to the latest version
  2. $ npm install
  3. $ react-native android
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/image.html b/docs/image.html index 58505098f1e..d30afde09a9 100644 --- a/docs/image.html +++ b/docs/image.html @@ -429,7 +429,7 @@ exports.examples : 1, height: 200, }, -});
Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/interactionmanager.html b/docs/interactionmanager.html index 2e4d2690dc4..d456b7bf90b 100644 --- a/docs/interactionmanager.html +++ b/docs/interactionmanager.html @@ -10,7 +10,7 @@ completion:

// later, on animation completion: InteractionManager.clearInteractionHandle(handle); -// queued tasks run if all handles were cleared

Methods #

static runAfterInteractions(callback: Function) #

Schedule a function to run after all interactions have completed.

static createInteractionHandle() #

Notify manager that an interaction has started.

static clearInteractionHandle(handle: Handle) #

Notify manager that an interaction has completed.

Properties #

Events: CallExpression #

addListener: CallExpression #

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/javascript-environment.html b/docs/javascript-environment.html index ce4e75e6a23..556ad0ce746 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

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

© 2015 Facebook Inc.

JavaScript Environment

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

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/known-issues.html b/docs/known-issues.html index faada527e7a..3e597d8d819 100644 --- a/docs/known-issues.html +++ b/docs/known-issues.html @@ -25,7 +25,7 @@ Alert

: 0}} /> </View>

The behavior on Android is what you would expect from the web as well. If you want to be able to click through an overlaying transparent view, you can set pointerEvents='none' on it.

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.

No support for shadows on Android #

We don't support shadows on Android currently. These are notoriously hard to implement as they require drawing outside of a view's bounds and Android's invalidation logic has a hard time with that. A possible solution is to use elevation, but more experimentation will be required.

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.

Next →
\ No newline at end of file + \ No newline at end of file diff --git a/docs/layoutanimation.html b/docs/layoutanimation.html index a4687d5c4fe..1723593366f 100644 --- a/docs/layoutanimation.html +++ b/docs/layoutanimation.html @@ -3,7 +3,7 @@ next layout happens.

A common way to use this API is to call LayoutA before calling setState.

Methods #

static configureNext(config: Config, onAnimationDidEnd?: Function) #

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: number, type, creationProp) #

Helper for creating a config for configureNext.

Properties #

Types: CallExpression #

Properties: CallExpression #

configChecker: CallExpression #

Presets: ObjectExpression #

easeInEaseOut: CallExpression #

linear: CallExpression #

spring: CallExpression #

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/linking-libraries-ios.html b/docs/linking-libraries-ios.html index be9f8898f60..8c9c034e2a9 100644 --- a/docs/linking-libraries-ios.html +++ b/docs/linking-libraries-ios.html @@ -18,7 +18,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).

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/linkingios.html b/docs/linkingios.html index ee7b0f3d064..dad9f1d444c 100644 --- a/docs/linkingios.html +++ b/docs/linkingios.html @@ -24,7 +24,7 @@ execution you'll need to add the following lines to you *AppDelegate. and providing the handler

static removeEventListener(type: string, handler: Function) #

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

static openURL(url: string) #

Try to open the given url with any of the installed apps.

static canOpenURL(url: string, callback: Function) #

Determine whether or not an installed app can handle a given url The callback function will be called with bool supported as the only argument

NOTE: As of iOS 9, your app needs to provide a LSApplicationQueriesSchemes key inside Info.plist.

static popInitialURL() #

If the app launch was triggered by an app link, it will pop the link url, -otherwise it will return null

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/listview.html b/docs/listview.html index 654c5cc0124..b6d4f891ec3 100644 --- a/docs/listview.html +++ b/docs/listview.html @@ -174,7 +174,7 @@ pixels.

}, }); -module.exports = ListViewSimpleExample;

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/mapview.html b/docs/mapview.html index a4bd59f3cd9..b430a7e09a0 100644 --- a/docs/mapview.html +++ b/docs/mapview.html @@ -251,7 +251,7 @@ exports.examples return <MapView style={styles.map} showsUserLocation={true} />; } } -];
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/modal.html b/docs/modal.html index 8f0bebfa988..55680602232 100644 --- a/docs/modal.html +++ b/docs/modal.html @@ -159,7 +159,7 @@ exports.examples : { marginTop: 10, }, -});
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/native-components-android.html b/docs/native-components-android.html index 93c9f8254f0..2564263ef5e 100644 --- a/docs/native-components-android.html +++ b/docs/native-components-android.html @@ -88,7 +88,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.

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/native-components-ios.html b/docs/native-components-ios.html index ef4d78c5e5a..be772a13942 100644 --- a/docs/native-components-ios.html +++ b/docs/native-components-ios.html @@ -227,7 +227,7 @@ MapView.propTypes "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.

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/native-modules-android.html b/docs/native-modules-android.html index 68f7cd01776..eb907784e78 100644 --- a/docs/native-modules-android.html +++ b/docs/native-modules-android.html @@ -133,7 +133,7 @@ WritableMap params = Arguments:function(e: Event) { this.keyboardWillOpenTo = e; this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e); - },
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/native-modules-ios.html b/docs/native-modules-ios.html index ae940796b80..7bdc1ce41d6 100644 --- a/docs/native-modules-ios.html +++ b/docs/native-modules-ios.html @@ -114,7 +114,7 @@ class CalendarManagerRCT_EXTERN_METHOD(addEvent:(NSString *)name location:(NSString *)location date:(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.

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/nativemethodsmixin.html b/docs/nativemethodsmixin.html index 94145f7d3ac..c448226d4ab 100644 --- a/docs/nativemethodsmixin.html +++ b/docs/nativemethodsmixin.html @@ -17,7 +17,7 @@ are relative to the origin x, y of the ancestor view.

As always, to obtain future diff process - this means that if you do not include them in the next render, they will remain active (see Direct Manipulation).

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().

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/navigator-comparison.html b/docs/navigator-comparison.html index a9177d09261..ca3628e9792 100644 --- a/docs/navigator-comparison.html +++ b/docs/navigator-comparison.html @@ -12,7 +12,7 @@ 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.
  • 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 behaviour 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.

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/navigator.html b/docs/navigator.html index 0010448e0ce..f4ea74d40d7 100644 --- a/docs/navigator.html +++ b/docs/navigator.html @@ -41,7 +41,7 @@ Use navigationContext.addListener('didfocus', callback) i complete or after the initial mounting

onWillFocus function #

@deprecated Use navigationContext.addListener('willfocus', callback) instead.

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} />

sceneStyle View#style #

Styles to apply to the container of each scene

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/navigatorios.html b/docs/navigatorios.html index 2748ec8c581..0b6cf9f94e3 100644 --- a/docs/navigatorios.html +++ b/docs/navigatorios.html @@ -272,7 +272,7 @@ A common use case is to set the backgroundColor for every page

}, }); -module.exports = NavigatorIOSExample;
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/netinfo.html b/docs/netinfo.html index ec7760dcee1..84720c8eab8 100644 --- a/docs/netinfo.html +++ b/docs/netinfo.html @@ -129,7 +129,7 @@ exports.examples : 'Observed updates to iOS reachability', render(): ReactElement { return <ReachabilitySubscription />; } }, -];
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/network.html b/docs/network.html index c54311ba802..78982d3b0df 100644 --- a/docs/network.html +++ b/docs/network.html @@ -39,7 +39,7 @@ ws.on.on('close', function(e) { // connection closed console.log(e.code, e.reason); -});
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/panresponder.html b/docs/panresponder.html index 51d9acc75c0..f4027f242f7 100644 --- a/docs/panresponder.html +++ b/docs/panresponder.html @@ -183,7 +183,7 @@ are the responder.

}, }); -module.exports = PanResponderExample;

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/performance.html b/docs/performance.html index cfaf60e47df..c86bf200a7a 100644 --- a/docs/performance.html +++ b/docs/performance.html @@ -185,7 +185,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.

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/pickerios.html b/docs/pickerios.html index fe2abf6ba39..b240367cfbb 100644 --- a/docs/pickerios.html +++ b/docs/pickerios.html @@ -106,7 +106,7 @@ exports.examples : function(): ReactElement { return <PickerExample />; }, -}];
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/pixelratio.html b/docs/pixelratio.html index c7cc9904bae..9563e38489c 100644 --- a/docs/pixelratio.html +++ b/docs/pixelratio.html @@ -12,7 +12,7 @@ by the pixel ratio.

static getPixelSizeForLayoutSize(layoutSize: number) #

Converts a layout size (dp) to pixel size (px).

Guaranteed to return an integer number.

static startDetecting() #

// No-op for iOS, but used on the web. Should not be documented.

Edit on GitHubDescription #

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.

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/progressbarandroid.html b/docs/progressbarandroid.html index f243ccd0e1e..44bfd2d166b 100644 --- a/docs/progressbarandroid.html +++ b/docs/progressbarandroid.html @@ -58,7 +58,7 @@ that the app is loading or there is some activity in the app.

Example:

}, }); -module.exports = ProgressBarAndroidExample;
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/progressviewios.html b/docs/progressviewios.html index 7ef2c6f61ba..1d28bd960c1 100644 --- a/docs/progressviewios.html +++ b/docs/progressviewios.html @@ -66,7 +66,7 @@ exports.examples : { marginTop: 20, } -});
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/pushnotificationios.html b/docs/pushnotificationios.html index ad1f5120c12..44321c1da64 100644 --- a/docs/pushnotificationios.html +++ b/docs/pushnotificationios.html @@ -171,7 +171,7 @@ exports.examples render(): React.Component { return <NotificationPermissionExample />; } -}];
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/running-on-device-android.html b/docs/running-on-device-android.html index ce8df133072..b24c949da09 100644 --- a/docs/running-on-device-android.html +++ b/docs/running-on-device-android.html @@ -1,4 +1,4 @@ -Running On Device – React Native | A framework for building native apps using React

Running On Device

USB Debugging #

The easiest way to develop on a device is by USB debugging. First, make sure you have USB debugging enabled on your device. Once debugging is enabled on the device you can use react-native run-android in the same way as with emulator to install and launch your React Native app on the connected 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 (reload, debug, etc.)

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 device to connect to the dev server via Wi-Fi #

To do that, your laptop and your phone have to be on the same wifi network.

  1. Open rage shake menu (shake the device) or run adb shell input keyevent 82
  2. Go to Dev Settings
  3. Go to Debug server host for device
  4. Type in your machine's IP address and the port of the packager and Reload JS
© 2015 Facebook Inc.

Running On Device

USB Debugging #

The easiest way to develop on a device is by USB debugging. First, make sure you have USB debugging enabled on your device. Once debugging is enabled on the device you can use react-native run-android in the same way as with emulator to install and launch your React Native app on the connected 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 (reload, debug, etc.)

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 device to connect to the dev server via Wi-Fi #

To do that, your laptop and your phone have to be on the same wifi network.

  1. Open rage shake menu (shake the device) or run adb shell input keyevent 82
  2. Go to Dev Settings
  3. Go to Debug server host for device
  4. Type in your machine's IP address and the port of the packager and Reload JS
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/running-on-device-ios.html b/docs/running-on-device-ios.html index 50420fd5431..f7ac6752aaf 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

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
  3. 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 #

You can also pack all the JavaScript code within the app itself. 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. Follow the instructions for "OPTION 2":
    • Uncomment jsCodeLocation = [[NSBundle mainBundle] ...
    • Run the react-native bundle command in terminal from the root directory of your app

The bundle script supports a couple of flags:

  • --dev - sets the value of __DEV__ variable to true. When true it turns on a bunch of useful development warnings. For production it is recommended to set __DEV__=false.
  • --minify - pipe the JS code through UglifyJS.

Note that on 0.14 we'll change the API of react-native bundle. The major changes are:

  • API is now entry-file <path> based instead of url based.
  • Need to specify which platform you're bundling for --platform <ios|android>.
  • Option --out has been renamed for --bundle-output.
  • Source maps are no longer automatically generated. Need to specify --sourcemap-output <path>

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.

If you started your project a while ago, main.jsbundle might not be included into Xcode project. To add it, right click on your project directory and click "Add Files to ..." - choose the main.jsbundle file that you generated.

© 2015 Facebook Inc.

Running On Device

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
  3. 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 #

You can also pack all the JavaScript code within the app itself. 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. Follow the instructions for "OPTION 2":
    • Uncomment jsCodeLocation = [[NSBundle mainBundle] ...
    • Run the react-native bundle command in terminal from the root directory of your app

The bundle script supports a couple of flags:

  • --dev - sets the value of __DEV__ variable to true. When true it turns on a bunch of useful development warnings. For production it is recommended to set __DEV__=false.
  • --minify - pipe the JS code through UglifyJS.

Note that on 0.14 we'll change the API of react-native bundle. The major changes are:

  • API is now entry-file <path> based instead of url based.
  • Need to specify which platform you're bundling for --platform <ios|android>.
  • Option --out has been renamed for --bundle-output.
  • Source maps are no longer automatically generated. Need to specify --sourcemap-output <path>

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.

If you started your project a while ago, main.jsbundle might not be included into Xcode project. To add it, right click on your project directory and click "Add Files to ..." - choose the main.jsbundle file that you generated.

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/scrollview.html b/docs/scrollview.html index 002ea9bcfc1..8a59b2eb3d9 100644 --- a/docs/scrollview.html +++ b/docs/scrollview.html @@ -169,7 +169,7 @@ THUMBS = THUMBS: 64, height: 64, } -});
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/segmentedcontrolios.html b/docs/segmentedcontrolios.html index 722295cd565..bbe0211ed7e 100644 --- a/docs/segmentedcontrolios.html +++ b/docs/segmentedcontrolios.html @@ -155,7 +155,7 @@ exports.examples : 'Change events can be detected', render(): ReactElement { return <EventSegmentedControlExample />; } } -];
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/signed-apk-android.html b/docs/signed-apk-android.html index 8d1066728b3..df495b73cfd 100644 --- a/docs/signed-apk-android.html +++ b/docs/signed-apk-android.html @@ -32,7 +32,7 @@ android { } } } -...
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/sliderios.html b/docs/sliderios.html index 53063f2f022..3ba36e3063a 100644 --- a/docs/sliderios.html +++ b/docs/sliderios.html @@ -57,7 +57,7 @@ exports.examples : 'SliderIOS', render(): ReactElement { return <SliderExample />; } } -];
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/statusbarios.html b/docs/statusbarios.html index 00f5fba2879..480ff31bbb4 100644 --- a/docs/statusbarios.html +++ b/docs/statusbarios.html @@ -99,7 +99,7 @@ exports.examples : '#eeeeee', padding: 10, }, -});
© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/style.html b/docs/style.html index c48cc3de0f0..3ed7ba09ed3 100644 --- a/docs/style.html +++ b/docs/style.html @@ -35,7 +35,7 @@ }); // ... in another file ... -<List style={styles.list} elementStyle={styles.listElement} />

Supported Properties #

You can checkout latest support of CSS Properties in following Links.

© 2015 Facebook Inc.
\ No newline at end of file + \ No newline at end of file diff --git a/docs/stylesheet.html b/docs/stylesheet.html index eabd98190c4..63a4eabe93b 100644 --- a/docs/stylesheet.html +++ b/docs/stylesheet.html @@ -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: {[key: string]: any}) #

    © 2015 Facebook Inc.
    \ No newline at end of file + \ No newline at end of file diff --git a/docs/switchandroid.html b/docs/switchandroid.html index 0f5d45ee392..af7eb7e412b 100644 --- a/docs/switchandroid.html +++ b/docs/switchandroid.html @@ -64,7 +64,7 @@ } }); -module.exports = SwitchAndroidExample;
    © 2015 Facebook Inc.
    \ No newline at end of file + \ No newline at end of file diff --git a/docs/switchios.html b/docs/switchios.html index 4f53b7ab2f0..2dfc94681d8 100644 --- a/docs/switchios.html +++ b/docs/switchios.html @@ -140,7 +140,7 @@ exports.examples : 'Switches are controlled components', render(): ReactElement { return <SwitchIOS />; } } -];
    © 2015 Facebook Inc.
    \ No newline at end of file + \ No newline at end of file diff --git a/docs/tabbarios-item.html b/docs/tabbarios-item.html index ba01509bae9..2c0cd88f96d 100644 --- a/docs/tabbarios-item.html +++ b/docs/tabbarios-item.html @@ -4,7 +4,7 @@ blank content, you probably forgot to add a selected one.

    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 overriden with the system ones.

    title string #

    Text that appears under the icon. It is ignored when a system icon -is defined.

    © 2015 Facebook Inc.
    \ No newline at end of file + \ No newline at end of file diff --git a/docs/tabbarios.html b/docs/tabbarios.html index 22a3b586c36..a1c88dccabf 100644 --- a/docs/tabbarios.html +++ b/docs/tabbarios.html @@ -92,7 +92,7 @@ }, }); -module.exports = TabBarExample;
    © 2015 Facebook Inc.
    \ No newline at end of file + \ No newline at end of file diff --git a/docs/testing.html b/docs/testing.html index 4ac02cd87e4..4cbac40ea00 100644 --- a/docs/testing.html +++ b/docs/testing.html @@ -19,7 +19,7 @@ "source-map" ] }, -...

    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

    Integration Tests (iOS only) #

    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, IntegrationTests.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 only) #

    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 snapshotshot reference image. To do this, simply change to _runner.recordMode = YES; in UIExplorer/IntegrationTests.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.

    © 2015 Facebook Inc.
    \ No newline at end of file + \ No newline at end of file diff --git a/docs/text.html b/docs/text.html index 77473b210f3..dafeafa8a5f 100644 --- a/docs/text.html +++ b/docs/text.html @@ -72,7 +72,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.

    © 2015 Facebook Inc.
    \ No newline at end of file + \ No newline at end of file diff --git a/docs/textinput.html b/docs/textinput.html index c7787f996cb..175d95b08eb 100644 --- a/docs/textinput.html +++ b/docs/textinput.html @@ -36,7 +36,7 @@ unwanted edits without flicker.

    iosmaxLength number #

    Limits the maximum number of characters that can be entered. Use this instead of implementing the logic in JS to avoid 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.

    iosreturnKeyType enum('default', 'go', 'google', 'join', 'next', 'route', 'search', 'send', 'yahoo', 'done', 'emergency-call') #

    Determines how the return key should look.

    iosselectTextOnFocus bool #

    If true, all text will automatically be selected on focus

    iosselectionState DocumentSelectionState #

    See DocumentSelectionState.js, some state that is responsible for -maintaining selection information for a document

    androidtextAlignVertical enum('top', 'center', 'bottom') #

    Aligns text vertically within the TextInput.

    androidunderlineColorAndroid string #

    The color of the textInput underline.

    © 2015 Facebook Inc.
    \ No newline at end of file + \ No newline at end of file diff --git a/docs/timers.html b/docs/timers.html index ee0fda34244..3232bd75f28 100644 --- a/docs/timers.html +++ b/docs/timers.html @@ -14,7 +14,7 @@ 500 ); } -});

    We strongly discourage using the global setTimeout(...) and recommend instead that you use this.setTimeout(...) provided by react-timer-mixin. This will eliminate a lot of hard work tracking down bugs, such as crashes caused by timeouts firing after a component has been unmounted.

    © 2015 Facebook Inc.
    \ No newline at end of file + \ No newline at end of file diff --git a/docs/toastandroid.html b/docs/toastandroid.html index f6a80efb37f..2f7491a7b70 100644 --- a/docs/toastandroid.html +++ b/docs/toastandroid.html @@ -51,7 +51,7 @@ which takes the following parameters:

    1. String message: A string with t }, }); -module.exports = ToastExample;
      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/toolbarandroid.html b/docs/toolbarandroid.html index e067ff4a297..80b1d716777 100644 --- a/docs/toolbarandroid.html +++ b/docs/toolbarandroid.html @@ -133,7 +133,7 @@ callback is the position of the action in the actions array.

      }, }); -module.exports = ToolbarAndroidExample;
      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/touchablehighlight.html b/docs/touchablehighlight.html index 4f7bf27f3a9..bb1ccc8fdc1 100644 --- a/docs/touchablehighlight.html +++ b/docs/touchablehighlight.html @@ -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.

      Edit on GitHubProps #

      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 string #

      The color of the underlay that will show through when the touch is -active.

      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/touchablenativefeedback.html b/docs/touchablenativefeedback.html index 18557c4bd90..7798a25ae07 100644 --- a/docs/touchablenativefeedback.html +++ b/docs/touchablenativefeedback.html @@ -26,7 +26,7 @@ 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+

      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/touchableopacity.html b/docs/touchableopacity.html index aa79bc40e1b..63d8e38b9d7 100644 --- a/docs/touchableopacity.html +++ b/docs/touchableopacity.html @@ -11,7 +11,7 @@ easy to add to an app without weird side-effects.

      Example:

      /TouchableOpacity> ); },

      Edit on GitHubProps #

      activeOpacity number #

      Determines what the opacity of the wrapped view should be when touch is -active.

      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/touchablewithoutfeedback.html b/docs/touchablewithoutfeedback.html index bfd11cca58f..412d772a863 100644 --- a/docs/touchablewithoutfeedback.html +++ b/docs/touchablewithoutfeedback.html @@ -1,7 +1,7 @@ TouchableWithoutFeedback – React Native | A framework for building native apps using React

      TouchableWithoutFeedback

      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".

      Edit on GitHubProps #

      accessibilityComponentType View.AccessibilityComponentType #

      accessibilityTraits View.AccessibilityTraits, [View.AccessibilityTraits] #

      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.

      onLayout function #

      Invoked on mount and layout changes with

      {nativeEvent: {layout: {x, y, width, height}}}

      onLongPress function #

      onPress function #

      Called when the touch is released, but not if cancelled (e.g. by a scroll -that steals the responder lock).

      onPressIn function #

      onPressOut function #

      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/transforms.html b/docs/transforms.html index 06e6aa61e9c..5a2b136d56f 100644 --- a/docs/transforms.html +++ b/docs/transforms.html @@ -1,4 +1,4 @@ -Transforms – React Native | A framework for building native apps using React
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/troubleshooting.html b/docs/troubleshooting.html index 0d2c5e299e3..8a19b87f1ad 100644 --- a/docs/troubleshooting.html +++ b/docs/troubleshooting.html @@ -12,7 +12,7 @@ sudo chown -R $USER '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.

      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/tutorial.html b/docs/tutorial.html index 6d07f02acfc..a11ec115fe9 100644 --- a/docs/tutorial.html +++ b/docs/tutorial.html @@ -289,7 +289,7 @@ }, }); -AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);
      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/vibrationios.html b/docs/vibrationios.html index 534641582d9..2a43f2ce712 100644 --- a/docs/vibrationios.html +++ b/docs/vibrationios.html @@ -39,7 +39,7 @@ exports.examples : '#eeeeee', padding: 10, }, -});
      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/videos.html b/docs/videos.html index a7bf265b22d..27f17b205ab 100644 --- a/docs/videos.html +++ b/docs/videos.html @@ -15,7 +15,7 @@ This player is only available in HTML5 enabled browsers. Please update your brow download the episode

      -
      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/view.html b/docs/view.html index 6d5006e6a12..a5ff6c3946b 100644 --- a/docs/view.html +++ b/docs/view.html @@ -270,7 +270,7 @@ exports.examples ); }, }, -];
      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/docs/webview.html b/docs/webview.html index f20a22be03f..c91b2ade412 100644 --- a/docs/webview.html +++ b/docs/webview.html @@ -213,7 +213,7 @@ exports.examples : 'WebView', render(): ReactElement { return <WebViewExample />; } } -];
      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/img/alertIOS.png b/img/alertIOS.png new file mode 100644 index 0000000000000000000000000000000000000000..b35a2a457f92e94d95e134c2ffcadaadd73dc1f0 GIT binary patch literal 77677 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 Mn4`Nxg}r~=zcyE3D*ylh literal 0 HcmV?d00001 diff --git a/index.html b/index.html index ff35972bf48..14dede1d692 100644 --- a/index.html +++ b/index.html @@ -235,7 +235,7 @@ MyCustomView.propTypes var NativeMyCustomView = requireNativeComponent('MyCustomView', MyCustomView); module.exports = MyCustomView; -
      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file diff --git a/showcase.html b/showcase.html index c3f1841c43a..661e74abec7 100644 --- a/showcase.html +++ b/showcase.html @@ -1,4 +1,4 @@ -Showcase – React Native | A framework for building native apps using React
      \ No newline at end of file + \ No newline at end of file diff --git a/support.html b/support.html index 75bd75c3762..633ea8086a3 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.

      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!

      IRC #

      Many developers and users idle on Freenode.net's IRC network in #reactnative on freenode.

      Twitter #

      #reactnative hash tag on Twitter is used to keep up with the latest React Native news.

      © 2015 Facebook Inc.

      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.

      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!

      IRC #

      Many developers and users idle on Freenode.net's IRC network in #reactnative on freenode.

      Twitter #

      #reactnative hash tag on Twitter is used to keep up with the latest React Native news.

      © 2015 Facebook Inc.
      \ No newline at end of file + \ No newline at end of file