iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 17
1
Modern Web

使用 Modern Web 技術來打造 Native App系列 第 17

Day 17:活用第三方的 React Native Module

前言

在使用 React Native 的此時此刻,我們就已經站在巨人的肩膀上了。不過有時候官方並不一定有提供所有需要的功能,基於我們不該有勇無謀的重造輪子,這時在社群尋找適合需求的高品質套件是首選,但找尋並評估套件是否適合也是門學問,還必須了解到不同模組的不同安裝方式。

如何找尋高品質的套件

npm 現在已經有超過三千個 React Native 相關的套件:

react-native 加上 keyword 在 npm 上來做搜尋通常是最直接有效的方式,而在在大多數狀況上 react-native-<keyword> 可能恰巧就是你想要的。(如果沒有也是個好機會,不如自己跳下來做一個?)

Yarn 現在也有提供不錯的套件查詢介面:

如果想要一覽高品質的套件再從其中找尋可用的,那從 Awesome React Native 裡面去找也是個不錯的方式。

這邊推薦大家安裝 Awesome stars 這個 Chrome Extension,就可以在 Awesome Repo 上面直接看到各 Repo 的 Star 數:

評估套件品質

下面幾個都是在評估套件時很有用的指標:

  • README 或文件的完整度與內容
  • 上一次 Commit 的時間點
  • 最近的幾則 Issue 和 PR 有沒有積極的在討論
  • Release 的版本號
  • 作者或所屬組織

作者或是所屬的組織也都能帶來一定的可信度,例如:ExponentReact Native Community 都是優質且專注在 React Native 的組織。

另外,稍微注意一下 License 也是專業開發者的一個好習慣,商用的專案應該盡量避免 GPL License 而選擇 MIT、BSD、Apache License 的模組來使用。

純 JavaScript Module

顧名思義是完全用 JavaScript 打造的模組,其安裝方式也不該跟在 Node 上有什麼區別,直接使用 npm 來安裝:

$ npm i --save <library>

當然,我現在更喜歡使用 Yarn 來安裝:

$ yarn add <library>

然後在程式碼直接 import

import Library, { NamedComponent } from 'library';

就可以隨意地去使用套件提供的 API 了。

Native Module

JavaScript 可以實現的功能其實很大一步受限於 React Native 實作並開放給使用者的 API,在核心沒有實作的情況下,熟悉 iOS、Android 的開發者可以自己去橋接原生的 API,這部分有些功能也可能在未來的版本被 React Native 給納入核心。

安裝時一樣是先用套件管理去安裝:

$ npm i --save <library-with-native-dependencies>

或是

$ yarn add <library-with-native-dependencies>

再來要用 react-nativelink 指令:

$ react-native link

例如,要安裝 react-native-linear-gradient 這個套件的話,我們必須執行:

$ yarn add react-native-linear-gradient
$ react-native link

以前必須手動打開 Xcode 來 Link Library 非常麻煩,由於 Alexey KureevMike Grabowski 一起開發的 rnpm 被整合進 React Native,這個步驟已經可以省略非常之多!

更詳細的教學或是手動 Link 的步驟可以參閱官方文件

結語

React Native 的模組開發者有很多是 JavaScript、Objective-C、Java 三棲的神人,以前總以為這樣的人非常稀少 (至少筆者不是),但看起來比想像中的多。而且需求總是一切開發的根源,React Native 的需求蒸蒸日上,一定會有更多更多的開發者一頭栽進來,讓其它的人能輕易的找到想要的模組。


上一篇
Day 16:在 React Native 中運用 Storage
下一篇
Day 18:GraphQL 入門 Part I - 從 REST 到 GraphQL
系列文
使用 Modern Web 技術來打造 Native App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言