在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ React Native 官網(wǎng)首頁介紹
JavaScript 環(huán)境
計(jì)時(shí)器
Native 模塊(iOS)
入門
在設(shè)備上運(yùn)行
ProgressBarAndroid
iOS 應(yīng)用程序狀態(tài)
網(wǎng)絡(luò)
ToolbarAndroid
測(cè)試
輔助功能
網(wǎng)絡(luò)信息
DrawerLayoutAndroid
樣式表
手勢(shì)應(yīng)答系統(tǒng)
與現(xiàn)有的應(yīng)用程序集成
樣式
教程
不透明觸摸
調(diào)試 React Native 應(yīng)用
iOS 活動(dòng)指示器
導(dǎo)航器
無反饋觸摸
動(dòng)畫布局
Web 視圖
鏈接庫
像素比率
React Native 官網(wǎng)首頁介紹
iOS 導(dǎo)航器
交互管理器
全景響應(yīng)器
SwitchAndroid
TabBarIOS.Item
相機(jī)滾動(dòng)
ToastAndroid
iOS 震動(dòng)
BackAndroid
文本輸入
iOS 選擇器
應(yīng)用程序注冊(cè)表
iOS 開關(guān)
滾動(dòng)視圖
iOS 日期選擇器
iOS 警告
iOS 鏈接
視圖
圖片
列表視圖
異步存儲(chǔ)
Native UI 組件(Android)
iOS 滑塊
Map 視圖
高亮觸摸
iOS 推送通知
文本
定位
iOS 狀態(tài)欄
Native UI 組件(iOS)
在設(shè)備上運(yùn)行(Android)
Native 模塊(Android)
Flexbox
已知 Issues
iOS 選項(xiàng)卡
安裝 Android 運(yùn)行環(huán)境

React Native 官網(wǎng)首頁介紹

React Native 使你能夠使用基于 JavaScript 和 React 一致的開發(fā)體驗(yàn)在本地平臺(tái)上構(gòu)建世界一流的應(yīng)用程序體驗(yàn)。React Native 把重點(diǎn)放在所有開發(fā)人員關(guān)心的平臺(tái)的開發(fā)效率上——開發(fā)者只需學(xué)習(xí)一種語言就能輕易為任何平臺(tái)高效地編寫代碼。Facebook 在多個(gè)應(yīng)用程序產(chǎn)品中使用了 React Native,并將繼續(xù)為 React Native 投資。

React Native 入門

原生的 iOS 組件

有了 ReactNative,你可使用標(biāo)準(zhǔn)平臺(tái)組件,比如 iOS 平臺(tái)上的 UITabBar 和 UINavigationController。這可以讓你的應(yīng)用程序擁有和原生平臺(tái)一致的外觀和體驗(yàn),并保持較高的品質(zhì)。使用相應(yīng)的 React 組件,如 iOS 標(biāo)簽欄和 iOS 導(dǎo)航器,這些組件可以輕松并入你的應(yīng)用程序中。

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>
    );
  },
});

異步執(zhí)行

JavaScript 應(yīng)用代碼和原生平臺(tái)之間所有的操作都是異步執(zhí)行,并且原生模塊也可以使用額外線程。這意味著我們可以解碼主線程圖像,并將其在后臺(tái)保存至磁盤,在不阻塞 UI 的情況下進(jìn)行文本和布局的估量計(jì)算,等等。因此,React Native 應(yīng)用程序的流暢度和響應(yīng)性都非常好。通信也是完全可序列化的,當(dāng)運(yùn)行完整的應(yīng)用程序時(shí),這允許我們使用 Chrome Developer Tools 來調(diào)試 JavaScript,或者在模擬器中,或者在真機(jī)上。

調(diào)試

http://wiki.jikexueyuan.com/project/react-native/images/chrome-breakpoint.png" alt="chrome-breakpoint" />

觸摸處理

iOS 有一個(gè)非常強(qiáng)大的系統(tǒng)稱為 Responder Chain,可以用來響應(yīng)復(fù)雜視圖層級(jí)中的事件,但是在 Web 中并沒有類似功能的工具。React Native 可實(shí)現(xiàn)類似的響應(yīng)系統(tǒng)并提供高水平的組件,比如 TouchableHighlight,無需額外配置即可與滾動(dòng)視圖和其他元素適度整合。

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>
    );
  },
});

彈性框和樣式

布局視圖應(yīng)該是簡(jiǎn)單的,所以我們將 Web 平臺(tái)上的彈性框模塊引入了 React Native。彈性框可用來搭建最常用的 UI 布局,比如代用邊緣和填充的堆疊和嵌入。React Native 還支持常見的 Web 樣式,比如 fontWeight 和 StyleSheet 抽象,它們提供了一種優(yōu)化機(jī)制來宣稱你所有的樣式和布局在組件中的應(yīng)用是正確的,且組件把它們應(yīng)用到了內(nèi)網(wǎng)中。

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 的重點(diǎn)是改變視圖代碼編寫的方式。接下來,我們注意網(wǎng)絡(luò)中普遍的并把那些 API 放在適當(dāng)?shù)牡胤???梢允褂?npm 安裝 JavaScript 庫,這些庫用于融入到 React Native 中的頂級(jí)功能,比如 XMLHttpRequest,window.requestAnimationFrame 及 navigator.geolocation。我們正在擴(kuò)大可用的 API,并致力于為開源社區(qū)做出貢獻(xiàn)。

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>
    );
  },
});

可擴(kuò)展性

使用 React Native 無需編寫一行原生代碼即可創(chuàng)建出一款不錯(cuò)的應(yīng)用程序,并且 React Native 可通過自定義原生視圖和模塊來進(jìn)行擴(kuò)展--也就是說你可以重用你已經(jīng)構(gòu)建的任何內(nèi)容,并且可導(dǎo)入和使用你最喜歡的原生庫。為了在 iOS 中創(chuàng)建一個(gè)簡(jiǎn)單的模塊,需要?jiǎng)?chuàng)建一個(gè)新的類來實(shí)現(xiàn) RCTBridgeModule 協(xié)議,并將你想要在 RCT_EXPORT_METHOD 中對(duì) JavaScript 可用的功能包裝起來。另外,類本身必須可以用 RCT_EXPORT_MODULE() 顯式導(dǎo)出;

// 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
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 (
      <Text>{this.state.text}</Text>
    );
  },
});

自定義的 iOS 視圖可以通過子類化 RCTViewManager,實(shí)現(xiàn) -(UIView *)view 方法并用 RCT_EXPORT_VIEW_PROPERTY 宏導(dǎo)出屬性的辦法來公開。然后一個(gè)簡(jiǎn)單的 JavaScript 文件會(huì)連接這些點(diǎn)。

// 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',
});

React Native 入門