---
# System prepended metadata

title: React Native 入門

---

# React Native 入門
在正式開始開發 React Native App 之前我們先來介紹一下 React Native 的主要特色：

- 使用 JavaScript（ES6+）和 React 打造跨平台原生應用程式（Learn once, write anywhere）
- 使用 Native Components，更貼近原生使用者體驗
- 在 JavaScript 和 Native 之間的操作為非同步（Asynchronous）執行，並可用 Chrome 開發者工具除錯，支援 Hot Reloading
- 使用 Flexbox 進行排版和布局
- 良好的可擴展性（Extensibility），容易整合 Web 生態系標準（XMLHttpRequest、 navigator.geolocation 等）或是原生的元件或函式庫（Objective-C、Java 或 Swift）
- Facebook 已使用 React Native 於自家 Production App 且將持續維護，另外也有持續蓬勃發展的技術社群
- 讓 Web 開發者可以使用熟悉的技術切入 Native App 開發


## 1. 環境安裝與設定

- 若是想在 iOS 平台開發需要先準備 Mac OS 和安裝 Xcode 開發工具，若是你準備使用 Android 平台的話建議先行安裝 Android Studio 和 Genymotion 模擬器。
- 一開始請先安裝 Node、Watchman 和 React Native command line 工具
- 資料夾結構我們可以設計成這樣

![](https://i.imgur.com/UHCq0iT.png)


## 2. 開發流程

// 若你使用 Mac OS 你可以使用官網安裝方式或是使用 homebrew 安裝
$ brew install node
// watchman 可以監看檔案是否有修改
$ brew install watchman


## 3. Response 規範

- Response Data 必須為 小陀峰命名規則 並且為  json type
- Http Status 必須正確回應 200, 401, 403, 500 , 503
- 任何 Request 都需回傳

| 欄位名稱      |    型別  | 說明 |   範例 |
| ------------ | ------------ | ------------ | -------|
|  statusType |  string | 判斷Client發出的Request驗證結果 | success: 驗證成功, error: 驗證失敗  |
| statusCode  |  number | 工程方便除錯使用代碼 或 不同錯誤類型前端會拿來做判斷要做什麼畫面回饋 | 未定義 |
|  message |  string | 定義成功失敗等等訊息 (需多語系) |  儲存成功 |
|  formMessage |  object  | 定義表單各別欄位的錯誤訊息 | {column: ‘欄位名稱’,message: ‘回饋訊息’} |
| data  | object  |  前端取用的資料 |  {rows: {name: imagine} } |
| newMemberToken  | string  |  後端判斷Token過期, 並且在可刷新時間內, 則將新token自動發行夾帶回傳 |   JWT字串(不含Bearer) |


Q1. 如果表單送出到後端API, 但因某個欄位驗證失敗, 那 statusType 應該傳 success 還是 error
> Ans: 要傳 error, 但 http status 還是 200, 這個 statusType 是驗證類別

Q2. 為什麼 data 裡面需要放置一個 rows, 不直接放置資料就好
> Ans: 當前端需要取得「多筆資料」的時候, 我不希望把 data 型別從 object 改成 array, 所以固定透過一個 rows 的 array{ object } 型態的欄位, 來固定取得這種 `主要的多筆資料`, 若我需要額外的資料則可放在 data 跟 rows 同層 (例如 page, limit)


## 修訂
- 20181130 刪除 Client-IP, 因為 proxy 後的 使用者IP, 後端已經有解
- 20180717 原本有 rows 取多筆, row 取單筆, 現在取消 row 這個固定使用欄位 (感覺沒必要)

## 參考連結
 - [Web APIs 設計](https://ihower.tw/cs/web-apis.html#sec1)
 - [保持SOLID的單一職責原則(SRP)](https://dotblogs.com.tw/givemin5/2016/05/01/022744)
 - [Http狀態碼](https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Status)