RN調(diào)用原生流程總結(jié)

RN調(diào)用原生分兩種:一種是調(diào)用原生組件(UI相關(guān))庆揩,另一種是調(diào)用原生模塊(功能塊)

一俐东、RN調(diào)用原生組件流程:

1、封裝原生模塊

先用Xcode創(chuàng)建原生模塊订晌,將其封裝到一個或幾個類文件中虏辫,并且編譯自測通過,確保該模塊在其他項目中集成能夠正常使用

2锈拨、將原生組件暴露給React端砌庄,供其調(diào)用封裝

2.1、使用Xcode工具創(chuàng)建一個繼承自RCTViewManager的子類(一般命名為原生組件名+ViewManager后綴),并將.h文件中的導(dǎo)入文件修改成#import <React/RCTViewManager.h>鹤耍,創(chuàng)建該類用于原生組件向React端暴露一些屬性肉迫、方法。
2.2稿黄、在.m文件中使用RCT_EXPORT_MODULE()宏將原生組件類暴露給React端喊衫,使其能夠訪問到該類。并且需要實現(xiàn)- (UIView *)view方法返回組件UI
2.3杆怕、通過RCT_EXPORT_VIEW_PROPERTY()RCT_EXPORT_METHOD()宏向React端分別暴露屬性和方法族购。
2.4、若需要回調(diào)陵珍,則需導(dǎo)入#import <React/RCTBridgeModule.h>寝杖,并且實現(xiàn)RCTBridgeModule協(xié)議,然后就可以使用RCTResponseSenderBlock``來實現(xiàn)回調(diào)功能互纯,另外還有錯誤回調(diào)RCTResponseErrorBlock```等可以查看文檔

3瑟幕、用JS代碼將原生UI組件封裝成一個可用的React組件

3.1、React端創(chuàng)建一個React組件類留潦,如TouchableView.js只盹, 導(dǎo)入import { requireNativeComponent } from 'react-native',其中requireNativeComponent中包含所有原生的封裝組件兔院,可自行console.log(requireNativeComponent)打印查看
3.2殖卑、提取原生組件并將它賦值給一個常量, let RNTouch = requireNativeComponent(‘RNTouchView’, TouchableView); requireNativeComponent中第一個參數(shù)可自行取坊萝,第二個參數(shù)為當前文件名
3.3孵稽、使用該原生組件

export default class TouchableView extends Component {
    render() {
        return(
            <RNTTouch  {...this.props}/>
        )
    }
};

3.4、這樣十偶,一個React組件就封裝完成菩鲜,接下來可以在需要的地方使用。使用前先導(dǎo)入該類惦积, import TouchableView from './TouchableView'之后睦袖,就可以使用了

<TouchableView
style={{width: 200, height: 200, marginTop: 50, marginLeft: 50, backgroundColor: 'yellow'}}/>

二、RN調(diào)用原生模塊流程:

1荣刑、封裝原生組件

先用Xcode創(chuàng)建原生組件馅笙,將其封裝到一個或幾個類文件中,并且編譯自測通過厉亏,確保該組件在其他項目中集成能夠正常使用

2董习、將原生模塊暴露給React端,供其調(diào)用

2.1爱只、在需要供RN調(diào)用的模塊地方實現(xiàn)RCT_EXPORT_MODULE()宏皿淋,將模塊暴露給React端,不同于原生組件,原生模塊類不需要繼承自RCTViewManager以及不需要實現(xiàn)- (UIView *)view方法
2.2窝趣、使用RCT_EXPORT_VIEW_PROPERTY()RCT_EXPORT_METHOD()宏向React端暴露屬性和方法(同原生組件)疯暑。
2.3、若需要回調(diào)哑舒,則仍需導(dǎo)入#import <React/RCTBridgeModule.h>妇拯,并且實現(xiàn)RCTBridgeModule協(xié)議,然后就可以使用```RCTResponseSenderBlock``來實現(xiàn)回調(diào)功能(這點也同原生組件調(diào)用)

3洗鸵、React端使用原生組件

3.1越锈、不同于原生組件,原生模塊的調(diào)用可以直接在所需要的地方調(diào)用膘滨,而不需要React端進一步封裝甘凭。在需要調(diào)用的地方導(dǎo)入import { NativeModules } from 'react-native';
3.2、將原生組件導(dǎo)出賦值給常量火邓, let OCRRecognizeManager = NativeModules.OCRRecognizeManager; 其中OCRRecognizeManager名字即為剛實現(xiàn)RCT_EXPORT_MODULE()宏的類名丹弱,常量名可隨意取
3.3、在對應(yīng)的地方使用該模塊中的功能铲咨,如:

OCRRecognizeManager.showOCRViewWithType(1, (callback) => {
    alert(callback)
})

其中showOCRViewWithType方法為原生模塊中暴露給React端的方法蹈矮,在這里也能夠順利調(diào)用到了。

RN調(diào)用原生的流程基本就是這樣鸣驱。

如有疑問或錯誤地方請在評論區(qū)提出。轉(zhuǎn)載請注明出處蝠咆。

參考資料:
Demo
RN中文網(wǎng)-原生UI組件
RN中文網(wǎng)-原生模塊
React Native封裝iOS原生UIViewController
React Native 封裝原生UI組件(iOS)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踊东,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子刚操,更是在濱河造成了極大的恐慌闸翅,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菊霜,死亡現(xiàn)場離奇詭異坚冀,居然都是意外死亡,警方通過查閱死者的電腦和手機鉴逞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門记某,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人构捡,你說我怎么就攤上這事液南。” “怎么了勾徽?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵滑凉,是天一觀的道長。 經(jīng)常有香客問我,道長畅姊,這世上最難降的妖魔是什么咒钟? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮若未,結(jié)果婚禮上朱嘴,老公的妹妹穿的比我還像新娘。我一直安慰自己陨瘩,他們只是感情好腕够,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舌劳,像睡著了一般帚湘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甚淡,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天大诸,我揣著相機與錄音,去河邊找鬼贯卦。 笑死资柔,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的撵割。 我是一名探鬼主播贿堰,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼啡彬!你這毒婦竟也來了羹与?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤庶灿,失蹤者是張志新(化名)和其女友劉穎纵搁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體往踢,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡腾誉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了峻呕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片利职。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瘦癌,靈堂內(nèi)的尸體忽然破棺而出眼耀,到底是詐尸還是另有隱情,我是刑警寧澤佩憾,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布哮伟,位于F島的核電站干花,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏楞黄。R本人自食惡果不足惜池凄,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鬼廓。 院中可真熱鬧肿仑,春花似錦、人聲如沸碎税。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雷蹂。三九已至伟端,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匪煌,已是汗流浹背责蝠。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萎庭,地道東北人霜医。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像驳规,于是被迫代替她去往敵國和親肴敛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容