From 9a52a01cb371f55923f766b4decae221f1f00e52 Mon Sep 17 00:00:00 2001 From: Spencer Ahrens Date: Wed, 25 Mar 2015 19:51:13 -0700 Subject: [PATCH] update landing page + add extensibility. --- website/src/react-native/_index.js | 102 +++++++++++++++--- .../react-native/img/chrome_breakpoint.png | Bin 592986 -> 738956 bytes 2 files changed, 88 insertions(+), 14 deletions(-) diff --git a/website/src/react-native/_index.js b/website/src/react-native/_index.js index 6bad5e8f942232..ded2bd6fbf01c0 100644 --- a/website/src/react-native/_index.js +++ b/website/src/react-native/_index.js @@ -39,7 +39,8 @@ var index = React.createClass({ {`var React = require('react-native'); var { TabBarIOS, NavigatorIOS } = React; -module.exports = React.createClass({ + +var App = React.createClass({ render: function() { return ( @@ -52,20 +53,21 @@ module.exports = React.createClass({ });`} -

Asynchronous

+

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 JS while running the app in the full app environment, in the sim or on a real device. + 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.

- -

Touch Handling

+ +

Touch Handling

- iOS has a very powerful system called the Responder Chain to negotiate touches in complex view hierarchies which does not have a universal analog on the web. React Native implements a similar responder system and provides high level components such as TouchableHighlight that integrate properly with scroll views and other elements without any additional configutation. + iOS has a very powerful system called the Responder Chain to negotiate touches in complex view hierarchies which does not have a universal analog on the web. React Native implements a similar responder system and provides high level components such as TouchableHighlight that integrate properly with scroll views and other elements without any additional configuration.

{`var React = require('react-native'); var { ScrollView, TouchableHighlight, Text } = React; -module.exports = React.createClass({ + +var TouchDemo = React.createClass({ render: function() { return ( @@ -80,12 +82,13 @@ module.exports = React.createClass({

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 easy to build the most common UI layouts, such as stacked and nested boxes with margin and padding. React Native also supports common web syles, such as fontWeight, and the StyleSheet abstraction makes it easy to declare all your styles and layout right along with the components that use them and used inline. + 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 syles, 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.

{`var React = require('react-native'); var { Image, StyleSheet, Text, View } = React; -module.exports = React.createClass({ + +var ReactNative = React.createClass({ render: function() { return ( @@ -116,16 +119,15 @@ var styles = StyleSheet.create({

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, requestAnimationFrame, and navigator.geolocation. We are working on expanding the available APIs, and are excited for the Open Source community to contribute as well. + 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.

{`var React = require('react-native'); var { Text } = React; -module.exports = React.createClass({ + +var GeoInfo = React.createClass({ getInitialState: function() { - return { - position: 'unknown', - }; + return { position: 'unknown' }; }, componentDidMount: function() { navigator.geolocation.getCurrentPosition( @@ -143,6 +145,78 @@ module.exports = React.createClass({ });`} +

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 expended 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. To create a simple module in iOS, create a new class that implements the RCTBridgeModule protocol, and add RCT_EXPORT to the function you want to make available in JavaScript. +

+ +{`// Objective-C + +#import "RCTBridgeModule.h" + +@interface MyCustomModule : NSObject +@end + +@implementation MyCustomModule + +- (void)processString:(NSString *)input callback:(RCTResponseSenderBlock)callback +{ + RCT_EXPORT(); // available as NativeModules.MyCustomModule.processString + callback(@[[input stringByReplacingOccurrencesOfString:@"Goodbye" withString:@"Hello"];]]); +} +@end`} + + +{`// JavaScript + +var React = require('react-native'); +var { NativeModules, Text } = React; + +var Message = React.createClass({ + render: function() { + getInitialState() { + return { text: 'Goodbye World.' }; + }, + componentDidMount() { + NativeModules.MyCustomModule.processString(this.state.text, (text) => { + this.setState({text}); + }); + }, + return ( + {this.state.text} + ); + }, +});`} + +

+ 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 + +- (UIView *)view +{ + return [[MyCustomView alloc] init]; +} + +RCT_EXPORT_VIEW_PROPERTY(myCustomProperty); +@end`} + + +{`// JavaScript + +module.exports = createReactIOSNativeComponentClass({ + validAttributes: { myCustomProperty: true }, + uiViewClassName: 'MyCustomView', +});`} +
diff --git a/website/src/react-native/img/chrome_breakpoint.png b/website/src/react-native/img/chrome_breakpoint.png index c5ab5f3e100b872f5b67e24c8a1f1457e15d494f..4b5f2872fac5a51fe500bfe227ab76e110f8f975 100644 GIT binary patch literal 738956 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