React Native簡介

React Native簡介

原文地址
這是翻譯,刪減的的reac native的官方簡介,翻譯完之后,還是挺失望的,槽點在于,你需要學習更多東西。同時舞動js和oc兩種語言,腳踏web和native兩套庫,才能從容應對開發中的挑戰。臉書此舉,不過是給web開發者向移動進軍提供了橋梁,對于移動開發者,可有可無,未必有很大吸引力。

  • React Native - 使用REACT開發世界一流的原生應用.
  • 使用JavaScript和React.
  • React Native專注于夸平臺的開發效率. 一次學習, 夸平臺應用.

開始搞React Native

原生 iOS 組件

可以直接使用iOS的原生組件, 這樣界面就會和平臺上得應用們一致了.

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

異步執行

JavaScript代碼和原生平臺之間的操作都是異步的. 這樣解碼圖片, 往磁盤存儲文件, 測量文本大小, 計算布局等等都可以再后臺運行而不阻塞界面. 這樣REACTIVE-NATIVE應用運行流暢, 響應迅速. The communication is also fully serializable, 可以使用Chrome的Web調試工具進行調試.

觸摸操作

React Native自建了一套響應系統代替了iOS的響應鏈系統.

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

伸縮盒與樣式表

React-Native使用伸縮盒以及樣式進行界面的布局和渲染

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

其他

React Native 聚焦于iOS的界面開發,其他方面,使用js等web通用技術.

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

擴展能力

可以將原生的代碼,導出給js用。

RCT_EXPORT_MODULE();.

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

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

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;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一. React Native的由來 它是什么React Native是Facebook在React.js Con...
    我不叫奇奇閱讀 2,369評論 0 0
  • 前言 學習本系列內容需要具備一定 HTML 開發基礎,沒有基礎的朋友可以先轉至 HTML快速入門(一) 學習 本人...
    珍此良辰閱讀 7,309評論 33 15
  • TextInput是一個允許用戶在應用中通過鍵盤輸入文本的基本組件。本組件的屬性提供了多種特性的配置,譬如自動完成...
    亭止閱讀 3,294評論 1 0
  • 原教程內容詳見精益 React 學習指南,這只是我在學習過程中的一些閱讀筆記,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,860評論 1 18
  • 【編者按】本篇文章的作者是 Joyce Echessa——渥合數位服務創辦人,畢業于臺灣大學,近年來專注于協助客戶...
    OneAPM閱讀 1,968評論 1 11