# React Native [![Build Status](https://travis-ci.org/facebook/react-native.svg?branch=master)](https://travis-ci.org/facebook/react-native)
React Native enables you to build world-class application experiences on native platforms using a consistent developer experience based on JavaScript and
[React](http://facebook.github.io/react). The focus of React Native is on developer efficiency across all the platforms you care about - learn once, write anywhere. Facebook uses React Native in multiple production apps and will continue investing in React Native.
## Native iOS Components
With React Native, you can use the standard platform components such as `UITabBar` and `UINavigationController` on iOS. This gives your app a consistent look and feel with the rest of the platform ecosystem, and keeps the quality bar high. These components are easily incorporated into your app using their React component counterparts, such as _TabBarIOS_ and _NavigatorIOS_.
```javascript
var React = require('react-native');
var { TabBarIOS, NavigatorIOS } = React;
var App = React.createClass({
render: function() {
return (
<TabBarIOS>
<TabBarIOS.Item title="React Native" selected={true}>
<NavigatorIOS initialRoute={{ title: 'React Native' }} />
</TabBarIOS.Item>
</TabBarIOS>
);
},
});
```
## Asynchronous Execution
All operations between the JavaScript application code and the native platform are performed asynchronously, and the native modules can also make use of additional threads as well. This means we can decode images off of the main thread, save to disk in the background, measure text and compute layouts without blocking the UI, and more. As a result, React Native apps are naturally fluid and responsive. The communication is also fully serializable, which allows us to leverage Chrome Developer Tools to debug the JavaScript while running the complete app, either in the simulator or on a physical device.
![](http://facebook.github.io/react-native/img/chrome_breakpoint.png)
## 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 configuration.
```javascript
var React = require('react-native');
var { ScrollView, TouchableHighlight, Text } = React;
var TouchDemo = React.createClass({
render: function() {
return (
<ScrollView>
<TouchableHighlight onPress={() => console.log('pressed')}>
<Text>Proper Touch Handling</Text>
</TouchableHighlight>
</ScrollView>
);
},
});
```
## Flexbox and Styling
Laying out views should be easy, which is why we brought the flexbox layout model from the web to React Native. Flexbox makes it simple to build the most common UI layouts, such as stacked and nested boxes with margin and padding. React Native also supports common web styles, such as `fontWeight`, and the `StyleSheet` abstraction provides an optimized mechanism to declare all your styles and layout right along with the components that use them and apply them inline.
```javascript
var React = require('react-native');
var { Image, StyleSheet, Text, View } = React;
var ReactNative = React.createClass({
render: function() {
return (
<View style={styles.row}>
<Image
source={{uri: 'http://facebook.github.io/react/img/logo_og.png'}}
style={styles.image}
/>
<View style={styles.text}>
<Text style={styles.title}>
React Native
</Text>
<Text style={styles.subtitle}>
Build high quality mobile apps using React
</Text>
</View>
</View>
);
},
});
var styles = StyleSheet.create({
row: { flexDirection: 'row', margin: 40 },
image: { width: 40, height: 40, marginRight: 10 },
text: { flex: 1, justifyContent: 'center'},
title: { fontSize: 11, fontWeight: 'bold' },
subtitle: { fontSize: 10 },
});
```
## Polyfills
React Native is focused on changing the way view code is written. For the rest, we look to the web for universal standards and polyfill those APIs where appropriate. You can use npm to install JavaScript libraries that work on top of the functionality baked into React Native, such as `XMLHttpRequest`, `window.requestAnimationFrame`, and `navigator.geolocation`. We are working on expanding the available APIs, and are excited for the Open Source community to contribute as well.
```javascript
var React = require('react-native');
var { Text } = React;
var GeoInfo = React.createClass({
getInitialState: function() {
return { position: 'unknown' };
},
componentDidMount: function() {
navigator.geolocation.getCurrentPosition(
(position) => this.setState({position}),
(error) => console.error(error)
);
},
render: function() {
return (
<Text>
Position: {JSON.stringify(this.state.position)}
</Text>
);
},
});
```
## Extensibility
It is certainly possible to create a great app using React Native without writing a single line of native code, but React Native is also designed to be easily extended with custom native views and modules - that means you can reuse anything you've already built, and can import and use your favorite native libraries. To create a simple module in iOS, create a new class that implements the `RCTBridgeModule` protocol, and wrap the function that you want to make available to JavaScript in `RCT_EXPORT_METHOD`. Additionally, the class itself must be explicitly exported with `RCT_EXPORT_MODULE();`.
```objc
// Objective-C
#import "RCTBridgeModule.h"
@interface MyCustomModule : NSObject <RCTBridgeModule>
@end
@implementation MyCustomModule
RCT_EXPORT_MODULE();
// Available as NativeModules.MyCustomModule.processString
RCT_EXPORT_METHOD(processString:(NSString *)input callback:(RCTResponseSenderBlock)callback)
{
callback(@[[input stringByReplacingOccurrencesOfString:@"Goodbye" withString:@"Hello"]]);
}
@end
```
```javascript
// JavaScript
var React = require('react-native');
var { NativeModules, Text } = React;
var Message = React.createClass({
getInitialState() {
return { text: 'Goodbye World.' };
},
componentDidMount() {
NativeModules.MyCustomModule.processString(this.state.text, (text) => {
this.setState({text});
});
},
render: function() {
return (
<Text>{this.state.text}</Text>
);
},
});
```
Custom iOS views can be exposed by subclassing `RCTViewManager`, implementing a `-view` method, and exporting properties with the `RCT_EXPORT_VIEW_PROPERTY` macro. Then use `requireNativeComponent` in JavaScript to use the component in your app.
```objc
// Objective-C
#import "RCTViewManager.h"
@interface MyCustomViewManager : RCTViewManager
@end
@implementation MyCustomViewManager
RCT_EXPORT_MODULE()
- (UIView *)view
{
return [[MyCustomView alloc] init];
}
RCT_EXPORT_VIEW_PROPERTY(myCustomProperty, NSString);
@end
```
```javascript
// JavaScript
var React = require('react-native');
var { requireNativeComponent } = React;
class MyCustomView extends React.Component {
render() {
return <NativeMyCustomView {...this.props} />;
}
}
MyCustomView.propTypes = {
myCustomProperty: React.PropTypes.oneOf(['a', 'b']),
};
var NativeMyCustomView = requireNativeComponent('MyCustomView', MyCustomView);
module.exports = MyCustomView;
```
## Running the Examples
- `git clone https://github.com/facebook/react-native.git`
- `cd react-native && npm install`
- `cd Examples`
Now open any example and hit run in Xcode.
Further documentation, tutorials, and more on the [React Native website](http://facebook.github.io/react-native/docs/getting-started.html).
## 仓库
https://github.com/facebook/rea
没有合适的资源?快使用搜索试试~ 我知道了~
react-native-0.9.0.zip
共930个文件
js:446个
h:158个
m:154个
需积分: 0 0 下载量 42 浏览量
2024-08-29
15:44:12
上传
评论
收藏 7.93MB ZIP 举报
温馨提示
一个使用 React 构建 app 应用程序的框架 A framework for building native applications using React
资源推荐
资源详情
资源评论
收起资源包目录
react-native-0.9.0.zip (930个子文件)
_flowconfig 2KB
_gitignore 294B
libOCMock.a 1.98MB
launchChromeDevTools.applescript 1KB
.babelrc 559B
Layout.c 30KB
launchPackager.command 493B
react-native.css 14KB
index.css 2KB
e2e-npmrc 111B
.eslintignore 87B
.eslintrc 15KB
.flowconfig 2KB
ReboundImage.gif 1.87MB
Rebound.gif 619KB
LayoutAnimationExample.gif 73KB
TweenState.gif 39KB
AnimationExperimentalScaleXY.gif 6KB
AnimationExperimentalOpacity.gif 4KB
.gitignore 366B
.gitignore 274B
.gitignore 48B
RCTConvert.h 8KB
RCTBridgeModule.h 7KB
RCTViewManager.h 6KB
FBSnapshotTestController.h 6KB
RCTShadowView.h 6KB
FBSnapshotTestCase.h 5KB
RCTBridge.h 4KB
RCTSRWebSocket.h 4KB
RCTProfile.h 4KB
Layout.h 4KB
RCTTestRunner.h 4KB
RCTLog.h 3KB
RCTRootView.h 3KB
RCTAssert.h 3KB
RCTView.h 3KB
RCTEventDispatcher.h 3KB
RCTUtils.h 3KB
OCMock.h 2KB
RCTUIManager.h 2KB
RCTJavaScriptExecutor.h 2KB
RCTScrollView.h 2KB
RCTImageDownloader.h 2KB
RCTImageLoader.h 2KB
OCMockObject.h 2KB
RCTURLRequestHandler.h 2KB
OCMStubRecorder.h 2KB
RCTDefines.h 2KB
RCTBorderDrawing.h 2KB
OCMConstraint.h 2KB
RCTDevMenu.h 2KB
RCTDownloadTask.h 2KB
RCTWebViewExecutor.h 2KB
OCMArg.h 2KB
RCTCache.h 1KB
RCTImageUtils.h 1KB
RCTAsyncLocalStorage.h 1KB
UIImage+Compare.h 1KB
UIImage+Diff.h 1KB
RCTSparseArray.h 1KB
RCTURLRequestDelegate.h 1KB
UIView+React.h 1KB
RCTShadowText.h 1KB
RCTViewNodeProtocol.h 1KB
RCTModuleData.h 1KB
RCTNavItem.h 1KB
RCTFrameUpdate.h 1KB
RCTWrapperViewController.h 1KB
RCTTextView.h 1KB
RCTModuleMethod.h 1KB
OCMMacroState.h 1KB
OCMLocation.h 1KB
OCMRecorder.h 1KB
RCTMap.h 1KB
RCTTestModule.h 1KB
RCTJSMethodRegistrar.h 1KB
ARTBrush.h 1KB
RCTNavigator.h 1KB
ARTNode.h 983B
RCTKeyCommands.h 977B
ARTTextFrame.h 953B
RCTTextField.h 923B
RCTExceptionsManager.h 916B
RCTConvert+ART.h 901B
RCTContextExecutor.h 899B
RCTDownloadTaskWrapper.h 895B
NSNotificationCenter+OCMAdditions.h 892B
RCTWebView.h 829B
RCTImageStoreManager.h 825B
RCTConvert+MapKit.h 822B
RCTRedBox.h 819B
RCTScrollableProtocol.h 805B
RCTPushNotificationManager.h 804B
RCTJavaScriptLoader.h 803B
RCTViewControllerProtocol.h 773B
AppDelegate.h 769B
AppDelegate.h 769B
AppDelegate.h 768B
AppDelegate.h 768B
共 930 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
a3737337
- 粉丝: 0
- 资源: 2869
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功