1. 程式人生 > >封裝iOS原生模組供ReactNative使用.

封裝iOS原生模組供ReactNative使用.

React Native支援在其基礎上編寫原生程式碼, 具有訪問平臺所有的能力.在日常開發中,github上很多的RN元件已經滿足了大家的使用.如果有不支援你需要的原生特性的需求出現,就需要自己該特性的封裝.

參考rn中文網.在React Native中,一個“原生模組”就是一個實現了“RCTBridgeModule”協議的Objective-C類,其中RCT是ReaCT的縮寫.

本文按照一個呼叫本地通訊錄的示例來說明.

大家需要新建一個靜態檔案庫


元件名稱MailList  在.h檔案中


.m檔案

為了實現RCTBridgeModule協議,你的類需要包含RCT_EXPORT_MODULE()巨集。這個巨集也可以新增一個引數用來指定在Javascript中訪問這個模組的名字。如果你不指定,預設就會使用這個Objective-C類的名字。


在這裡我們指定改類名


然後我們需要宣告給Javascript匯出的方法,宣告通過RCT_EXPORT_METHOD()巨集來實現:


我是把需要js傳遞的引數放入字典中了, 如果沒有引數

RCT_EXPORT_METHOD(getMailList:(RCTResponseSenderBlock)sucessCallback :(RCTResponseSenderBlock)failCallback)

{

   //寫入你呼叫原生通訊錄的程式碼

   //展示原生通訊錄介面 需要你獲取當前的控制器 , 然後把通訊錄介面展示在當前控制器上

}

然後再靜態庫中配置路徑


路徑輸入 $(SRCROOT)/../../react-native/React, 選擇recurvise

然後我們新建一個資料夾名稱


按照官方命名規範,外掛名稱都是小寫.

然後再該資料夾中,需要我們新建一個iOS資料夾和一個index.js檔案

iOS 資料夾放入你寫的外掛內容


index.js 匯出該外掛


package.json 通過npm init 自動生成.

然後我們可以將該外掛複製到RN工程 的node_modules中


然後大家通過react-native link  xxx(外掛全稱) 命令整合進工程中,

也可以手動匯入,在Libraries中 選擇Add Files to "工程名", 選擇node_modules中要匯入的外掛mailList.xcodeproj新增進來,

然後Build Phases中新增靜態.a檔案進去



最終我們在RN工程中可以通過js呼叫


相關推薦

封裝iOS原生模組ReactNative使用.

React Native支援在其基礎上編寫原生程式碼, 具有訪問平臺所有的能力.在日常開發中,github上很多的RN元件已經滿足了大家的使用.如果有不支援你需要的原生特性的需求出現,就需要自己該特性的

封裝iOS原生資源庫link到專案ReactNative使用

ReactNative發現到現在,已經支援其在基礎上編寫原生程式碼,具有訪問平臺所有能力。如今在GitHub上已經有很多的RN元件滿足大家使用了,但當出現特定需求時候呢?RN不支援你所需要的原生特性的時候,這個時候就需要自己去封裝該特性了。參考ReactNative中文網,一個“原生模組”就是一個實現了“RC

React Native iOS原生模組開發實戰|教程|心得|如何建立React Native iOS原生模組

尊重版權,未經授權不得轉載 本文出自:賈鵬輝的技術部落格(http://blog.csdn.net/fengyuzhengfan/article/details/54691432) 告訴大家一個好訊息,為大家精心準備的React Native視訊教程釋出了,大家

使用node連線mySQL,封裝自定義模組外部呼叫

當我們使用node.js寫網站的時候,難免會有一些操作讓我們連線資料庫,並對資料庫經行操作,但是每次都需要對資料庫進行連線與斷開連線,所以,我寫下這篇文章,將連線資料庫的操作封裝到一個模組中,然後簡化外部呼叫的程式碼。廢話不多說,直接看node.js怎麼連線my

iOS原生頁面、ReactNative頁面之間相互跳轉

在學習RN中遇到過一個問題,就是原生頁面通過navigation push到一個Rn頁面,如果使用原生的navigation的話,rn頁面中的導航頭無法定義title、左右按鈕等等自定義控制元件,為了解決這個問題,可以在原生頁面push事件觸發的時候隱藏導航頭,在rn頁面中手

ios 原生整合ReactNative錯誤總結2之TransformError

TransformError:/xx/xx/Desktop/RNDemo/RN/index.ios.js: /xx/xx/Desktop/package.json: Error while parsing JSON - Unexpected token \\ in JSON at position

React-Native 自封裝原生模組

React-Native 出現也有一段時間了,其實我們在一些應用中已經接觸過基於它的或效果類似於它的App,如手機淘寶。在每年雙十一時我們會發現沒有更新app也會有一些不同的介面。當然你可能認為WebView也可以做到這些。但實際上RN與WebView是不同的,RN的控制元件正如其

ReactNative 自定義Android原生模組的兩種形式

ReactNative 自定義Android原生模組的兩種形式 1.原生View模組 繼承SimpleViewManager<返回View型別> 必須重寫getName()和createViewInstance(ThemedReactContext context

ReactNative 呼叫Android 原生(一)——原生模組(一)

前言 React native呼叫Android原生主要2種方式: 1、呼叫原生模組 2、呼叫原生元件 這裡之所以強調有2種方式主要是自己剛開始弄rn調原生的時候感覺很懵,感覺沒有學習的方向,所以提醒一

ReactNative 呼叫Android 原生(一)——原生模組(二)

ReactNative 呼叫Android 原生(一)——原生模組(一):https://blog.csdn.net/danfengw/article/details/83862623 在上次文章中我們只是簡單的嘗試了rn給Android原生傳遞引數呼叫Andr

IOS原生整合ReactNative

     折騰了一天,看到網上很多帖子說原生整合RN使用cocopods 會報各種奇葩的錯誤,給我嚇得趕緊使用拖拉檔案的方式。哪知道一直沒成功。嘗試了下cocoapods整合RN,成功了,下面來分享下我的成功,嘻嘻~ 1.首先新建個xcode工程 2.使用終端命

ios網路請求框架,基於AFNetworking封裝,其中快取模組依賴TMCache,JSON解析模組依賴MJExtension,使用更加簡單方便

LazyNetForIOS 由於本人不太會寫文章,有寫得不好得地方請見諒 專案介紹 專案地址 介紹: 非常感謝這三個作品得作者,個人也熱衷與開源,以後有覺得好的東西都會熱於與大家分享

week-iOS的擴充套件之內建模組,將原生模組做成標籤在weex中使用

在自定義module這篇部落格中,部落格解析瞭如何自定義module來和weex的js做互動,當時有提到定義原生模組為標籤,地址和Demo請點選上方連結檢視,這篇部落格,博主將詳細解釋如果把weex中不支援的模組在weex中嵌入。 在iOS中: 1.建立一個繼承於WXComponen

android原生專案嵌入ReactNative 模組

1.在原有 Android 專案中嵌入 ReactNative 模組 ReactNative的發展已經進入了很多開發者視野,作為一名原生開發者更是對 RN 充滿了無限的好奇和期待 相信對於小白的我們,第一步就是如何優雅的整合rn專案,廢話不多說直接進入主題

ReactNative學習筆記之呼叫原生模組(進階)之Callback、Promise使用

前言 前文ReactNative學習筆記——呼叫原生模組(Android)簡單說了下ReactNative呼叫Android原生模組的基本用法,下面講解下呼叫原生模組經常會用到的Callback和Promise。 很多時候我們可能不僅僅是呼叫Native的方

WebViewJavascriptBridge 使用 js調iOS原生代碼

創建 smi creat color web var key urn cti js代碼和原生ios代碼進行交互使用WebViewJavascriptBridge非常簡化了我們的操作特別是在ios這邊 js 掉用ios原生代碼時要註意的幾個事項: 1、js和ios定義好相互調

vue 實現 ios 原生picker 效果(實現思路分析)

sta 效果 cursor touchend orm dex tex sub alt 以前最早實現了一個類似的時間選擇插件,但是適用範圍太窄,索性最近要把這個實現方式發布出來,就重寫了一個高復用的vue組件。 支持安卓4.0以上,safari 7以上 效果預覽 gitHu

iOS原生請求獲取Cookie值

header share httpurl logs fields head working cache net 1 //創建URL 2 NSURL * url = [NSURL URLWithString:@"http://api.skyfox.or

ajax技術詳解,封裝一個原生的ajax請求

status 語法 match 基礎上 abort param sync 可選參數 導致 一、Ajax 概述 Ajax 是 Asynchronous Javascript And XML 的簡寫 Ajax是一門技術,並不是一門語言 使用XHTML+CSS來標準化呈現 使

WebViewJavascriptBridge實現js與android和ios原生交互

WebViewJavascriptB Android IOS js 1、實現原生與js交互 <!-- 申明交互 這段代碼固定必須有 --> function setupWebViewJavascriptBridge(callback) { //android使用