自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

React Native 你該了解的 Hello World

開發(fā) 開發(fā)工具
今天介紹 RN 的基礎(chǔ)開發(fā),讓大家能初步了解 RN 開發(fā)。

[[181099]]

2013 年 Facebook 開源了 React 框架,去年上半年開源了基于 React 的 React Native 框架 iOS 部分,下半年開源了 Android 部分。目前國內(nèi) QQ、天貓、攜程、QZone 等都有部分功能用 React Native 開發(fā)。

注:以下部分 React Native 以簡稱 RN 代替,Node 及 Node.js 均表示 Node.js。

限于篇幅,RN 的原理、 RN 與 Native 以及 Hybird 的優(yōu)劣對比、RN 的頁面跳轉(zhuǎn)及 Flexbox 等后面再分享,今天只介紹 RN 的基礎(chǔ)開發(fā),讓大家能初步了解 RN 開發(fā)。

1. 介紹

React 的 GitHub 介紹是:

  1. A declarative, efficient, and flexible JavaScript library for building user interfaces. 

簡單的說 React 就是一個 JS 庫,一個可用于編寫 UI 的庫。

React Native 的 GitHub 介紹是:

  1. A framework for building native apps with React. 

React Native 基于 React,可用來開發(fā) iOS 和 Android 原生應(yīng)用。

2. React Hello World

 React 示例

上面是 React 示例,是一個簡單的 html 文件,其結(jié)果是顯示 Hello CodeKK。

內(nèi)容主要分為三部分:

***部分引入 React JS 文件,跟一般的 JS 文件引入無異。

第二部分是定義一個 HelloMessage 的組件,組件的渲染函數(shù) render 輸出一個 div,div 內(nèi)容接受一個名為 name 的變量。

第三部分是 ReactDOM 將 HelloMessage 組件渲染到 example 這個 DOM 節(jié)點(diǎn)(body 內(nèi)部的 div)中。

上面的第二、三部分是 JSX 語法,這是 Facebook 對 ECMAScript 的擴(kuò)展,即 JavaScript 語法擴(kuò)展,基于 XML 樣式。非必須,React 也可以直接調(diào)用原生 JS。

JSX 語法可以讓前端代碼可讀性更高,同時像 Java Web 的 Velocity 以及 Node 的 Jade 一樣支持?jǐn)?shù)據(jù)綁定。

通過 React 我們可以讓 UI 代碼基于組件化開發(fā),可以更好的組合、復(fù)用,更方便進(jìn)行測試和維護(hù)。

同時 React 通過 Virtual DOM 提高性能,不直接操作 Real DOM,達(dá)到快速渲染的效果。

3. 新建 React Native Hello World

在完成必要軟件安裝后,命令行運(yùn)行

  1. react-native init AwesomeProject 

新建工程,其中 AwesomeProject 為工程名,在工程目錄下運(yùn)行

  1. react-native run-android 

或者

  1. react-native run-ios 

分別打包為 Android 或 iOS 應(yīng)用,編譯部署到相應(yīng)模擬器上運(yùn)行。

4. React Native Hello World 工程簡介

4.1 RN 工程目錄

RN 工程目錄

(1) android/ios 文件夾

用于存放 Android/iOS 平臺需要單獨(dú)適配的代碼。拿 Android 為例,android 文件夾內(nèi)部目錄結(jié)構(gòu)跟我們一般的 Android 工程一樣。

(2) index.android.js 和 index.ios.js 文件

分別為 Android 和 iOS 的啟動入口,可以簡單理解為 Java 的 Main 或者 Android 的 LAUNCHER & Main Activity。

React Native 可以通過將 .android 及 .ios 放在文件后綴前面作為 Android 及 iOS 的單獨(dú)適配文件。

如現(xiàn)在需要用到名為 codekk 的圖片,圖片目錄中有 codekk.png 和 codekk.android.png 兩個文件,則 iOS 平臺會打包 codekk.png,而 Android 平臺會打包 codekk.android.png 文件。

(3) package.json

package.json

跟 Node 工程類似,用于描述項(xiàng)目的基本信息以及需要的依賴信息,比如默認(rèn)依賴 React 和 React Native。

RN 也是通過 Node.js 的 npm 做依賴管理。

(4) node_modules 文件夾

自動生成的文件夾,存放 package.json 中配置的依賴的源碼以及 bin。

(5) 其他配置文件

.watchmanconfig 為 watchman 的配置文件,watchman 用于監(jiān)控文件變化,輔助實(shí)現(xiàn)工程修改所見即所得。

.flowconfig 為 flow 的配置文件,flow 用于代碼靜態(tài)檢查。

.buckconfig 為 buck 的配置文件,buck 是 Facebook 開源的高效編譯系統(tǒng),對 Android iOS 同時適用,通過復(fù)用未修改的代碼單元、增量編譯等提高編譯效率。

4.2 index.android.js 內(nèi)容

index.android.js 和 index.ios.js 文件內(nèi)容默認(rèn)一樣,如下:

index.android.js 和 index.ios.js 文件內(nèi)容默認(rèn)一樣

這是一個 js 文件,通過

  1. react-native run-android 

命令運(yùn)行后,其在 Android 模擬器中運(yùn)行結(jié)果為:居中顯示 Welcome to React Native!。

文件內(nèi)容主要分為三部分:

(1) 引入需要的組件

比如需要 react 中的 Component,需要 react-native 中的 View,跟 Java 以及 C++ 開發(fā)類似。

(2) 定義新的組件

繼承 Component 定義新的組件,組件的 render 函數(shù)返回一個 View,View 內(nèi)包含一個 Text 控件。

styles 為樣式,跟 CSS 類似。

(3) 注冊組件

AppRegistry 是運(yùn)行 RN Apps 的 JS 切入點(diǎn),App 的根組件需要通過 AppRegistry.registerComponent 注冊。

5. React Native 調(diào)試

(1) 即時運(yùn)行

React Native 調(diào)試即時運(yùn)行

通過 Debug 菜單開啟 Enable Hot Reloading 以及 Atom 編輯器的自動保存,可以達(dá)到修改代碼后自動部署到模擬器的效果。

Live Reload 與 Hot Reloading 類似,只是 Live Reload 之后會重新進(jìn)入 App 首頁,而 Hot 可以在當(dāng)前頁面直接刷新。

如果修改了 android 及 ios 文件夾下的內(nèi)容或者添加新的圖片等無法 Hot Reloading,需要重新運(yùn)行。

(2) 打日志

通過代碼中添加

  1. console.log('response from codekk is :' + response); 
  2.  
  3. console.error('error is :' + error); 

打印日志。console.warn console.info 等表示其他級別日志。

iOS 日志會打印在 Xcode 中。

Android 需要通過 adb logcat *:S ReactNative:V ReactNativeJS:V 命令在 Terminal 輸出日志。

(3) 遠(yuǎn)程調(diào)試

可以跟 JS 或 Node.js 一樣在 Chrome Developer Tools 中調(diào)試 React Native,在上面 Debug 菜單中選中 Debug JS Remotely,默認(rèn)會打開 http://localhost:8081/debugger-ui 調(diào)試頁面,如下圖:

打開 http://localhost:8081/debugger-ui 調(diào)試頁面

6. React Native 基礎(chǔ)組件

React Native 基礎(chǔ)通用組件包括 Text、Image、TextInput、ListView、View、WebView、Switch、Slider、ScrollView、MapView 等。

還有只適用于 Android 平臺的 DrawerLayoutAndroid、ProgressBarAndroid、ToolBarAndroid 等。

只適用于 iOS 平臺的 ProgressViewIOS、SegmentedControlIOS 等。

下面簡單以 Image、ListView 為例進(jìn)行介紹

(1) Image 組件

本地圖片 codekk.png

表示顯示本地圖片 codekk.png。

可以通過文件名后綴前加 @2x 和 @3x 表示不同分辨率圖片,如 codekk@2x.png、codekk@3x.png。

也可以直接顯示網(wǎng)絡(luò)圖片。

直接顯示網(wǎng)絡(luò)圖片

(2)ListView 組件

ListView 組件

在 render 渲染函數(shù)中調(diào)用 ListView 控件,有兩個主要的屬性 dataSource 和 renderRow。

dataSource 表示數(shù)據(jù)源,為一個數(shù)組,在組件構(gòu)造函數(shù)中初始化。

renderRow 表示渲染每行時會調(diào)用的函數(shù),入?yún)⑹?dataSource 中的一個數(shù)據(jù),類似 Android 的 getView。

ListView 同樣支持分割線、Header 及固定的分塊 Header、Footer、滾動監(jiān)聽、到達(dá)底部監(jiān)聽等特性。

7. React Native 網(wǎng)絡(luò)

RN 支持 Fetch、WebSocket、XMLHttpRequest 三種請求方式,其中 Fetch 方式更為常用,以 Fetch 為例:

 7. React Native 網(wǎng)絡(luò)

表示網(wǎng)絡(luò)獲取 http://api.codekk.com/op/page/1 的數(shù)據(jù),并轉(zhuǎn)換為 JSON,然后輸出。

8. Android、iOS 代碼共用

在 4.1 RN 工程目錄 的介紹中,我們可以看到分別有 index.android.js 和 index.ios.js 文件,我們看下怎么讓 Android 和 iOS 實(shí)現(xiàn)簡單的代碼復(fù)用。

將 index.android.js 和 index.ios.js 文件全部改為如下內(nèi)容:

將 index.android.js 和 index.ios.js 文件全部改為如下內(nèi)容

即讓 Android 和 iOS 都調(diào)用 index.js,在 index.js 中實(shí)現(xiàn)相同啟動邏輯。

index.js 內(nèi)容如下:

index.js 內(nèi)容

在 android、ios 文件夾同級目錄下新建 js 目錄存放共用代碼。

這樣 index.js 中示例除 ViewPagerAndroidDemo 和 DrawerLayoutDemo 只在 Android 下運(yùn)行有效果外,其他 Demo 都可以原封不動運(yùn)行在 iOS 中。

上面所有代碼都在 https://github.com/trinea/react-native-demo 中。

【本文是51CTO專欄作者Trinea的原創(chuàng)文章,轉(zhuǎn)載聯(lián)系作者本人獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2023-09-26 07:44:52

JavaJVM

2019-12-12 09:23:29

Hello World操作系統(tǒng)函數(shù)庫

2022-02-28 10:30:03

架構(gòu)代碼Native

2014-12-19 10:07:10

C

2017-11-23 17:45:46

Yii框架IntelYii框架深度剖析

2020-10-29 10:26:28

DevOps軟件自動化

2021-04-17 18:19:23

FlutterReact Nativ開發(fā)

2009-07-30 13:21:17

Scala入門Hello World

2009-09-16 17:15:19

OSGi Bundle

2009-08-11 10:32:23

什么是Groovy

2023-01-06 08:18:44

2023-09-04 07:30:03

Wasm匯編語言

2011-06-08 14:39:06

Qt 教程

2012-02-20 14:26:48

JavaPlay Framew

2016-12-29 11:01:54

ReactVue

2017-06-26 08:55:52

2019-07-05 10:53:55

ReactVue前端

2015-10-27 09:47:11

2021-01-04 08:37:53

動態(tài)規(guī)劃DP

2015-09-22 14:19:56

Cloud NativDevOps持續(xù)交付
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號