# 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)