ReactNative中的原生模塊

在RN開發(fā)中我們會遇到一些Android中已經(jīng)寫好的一些功能,在RN中,我們也要用,所以RN為我們提供了原生模塊。接下來帶大家了解一下原型模塊的制作過程以及!

首先,我們要知道三個主要的類:

? ? 1.ReactContextBaseJavaModule

? ? 2.ReactPackage

? ? 3.MainApplication

這三個類是我們在安卓中需要用到的一些類。下面我們利用Android中的Toast為例:


第一步:創(chuàng)建一個類去繼承ReactContextBaseJavaModule,實現(xiàn)方法getName,作用是返回給RN項目調(diào)用的名稱。

? ? ? ? ? ? ?? 構(gòu)造方法是必須要實現(xiàn)的。還有一個getConstants,這個方法是選擇性的實現(xiàn),它的作用是用來傳遞一些參數(shù),利用Map集合來傳遞參數(shù)例如:

? ? ? ? ? ? ? ?@Nullable

????????????????@Override

? ? ? ? ? ? ? ? public Map getConstants() {

????????????????????Map map =new HashMap<>();

????????????????????map.put(LONG_KEY,Toast.LENGTH_LONG);

????????????????????map.put(SHORT_KEY,Toast.LENGTH_SHORT);

????????????????????return map;

????????????????}

? ? ? ? ? ? ? ? 這個方法中,我將成員變量LONG_KEY和SHORT_KEY作為查找的key,將Toast中的LENGTH_LONG和LENGTH_SHORT作為了值,意思就是在RN中可以通過LONG_KEY中的值來進行調(diào)用。


第二步:@ReactMethod這個注解來聲明方法,可以在RN項目中被調(diào)用,例如:

? ? ? ? ? ? ?@ReactMethod

????????????public void show(String content , int time){

????????????????Toast.makeText(getReactApplicationContext(), content, time).show();

????????????}

? ? ? ? ? ? content就是在RN項目中傳遞的需要Toast的數(shù)據(jù),而time就是顯示的時長


第三步:寫一個類去實現(xiàn)ReactPackage這個接口,會重寫兩個方法createNativeModules和createViewManagers

????????????????createNativeModules:用來在注冊導(dǎo)入RN的原生模塊

????????????????createViewManagers:用來導(dǎo)入RN原生組件

? ? ? ? ? ? ? ? 我們用到的是第一個方法createNativeModules,非常簡單,只需要創(chuàng)建一個List集合將我們剛剛寫好的ReactContextBaseJavaModule的子類創(chuàng)建對象添加到集合中即可,在第二個方法最好不要默認返回空,雖然我們用不到,但是RN項目可能會調(diào)用到這個方法,為了防止控制針異常的出現(xiàn),我們創(chuàng)建一個集合返回一個沒有內(nèi)容的集合(注意:是空內(nèi)容集合不是沒有創(chuàng)建過得集合對象),例如:

????????????????public class MyPackage implements ReactPackage {

????????????????????@Override

????????????????????public List createNativeModules(ReactApplicationContext reactContext) {

????????????????????????List li =new ArrayList<>();

????????????????????????li.add(new MyView(reactContext));

????????????????????????return li;

????????????????????}

????????????????@Override

????????????????public List createViewManagers(ReactApplicationContext reactContext) {

????????????????????List li =new ArrayList<>();

????????????????????li.add(new com.helloworld.ViewManager());

????????????????????return li;

????????????????}

????????????}


第三步:我們直接打開MainApplication這個類,找到getPackages這個方法將我們的MyPackage類注冊到里面就可以了,例如:

????????????@Override

????????????protected List getPackages() {

????????????????return Arrays.asList(

????????????????????new MainReactPackage(),new MyPackage()

????????????????);

????????????}

做好以上三步,我們的安卓項目就正式搭建完成了!??!


。

當然只搭建Android項目是不夠的,我們還不會在RN項目中進行引用,那么接下來,帶大家學習一下,RN項目如何引用原生模塊!

我們只需要在RN導(dǎo)入組件的地方注冊NativeModules組件就完成了第一步

第二步是正式引用,直接在需要引用的地方調(diào)用,調(diào)用方法如下:

????????NativeModules.MyToast.show("內(nèi)容",NativeModules.MyToast.SHORT );

其中NativeModules.MyToast的意思是獲取到安卓項目中,繼承了ReactContextBaseJavaModule類 的類 的對象,也就是MyView(這是我們寫的第一個類)類。

第二個參數(shù)NativeModules.MyToast.SHORT的意思是,就不用說了吧,就是用對象調(diào)用靜態(tài)的成員變量,而調(diào)用show方法也是這樣的道理。

RN中我是這樣做示范的:

<Text? style={styles.welcome}

? ? ?? onPress={() => {

? ? ? ? ? ? NativeModules.MyToast.show("Toast的內(nèi)容", 0);

? ? ? ? }}>

? ? ? ? ? Welcome to React Native!

? ? ? ? </Text>


這樣我們的一個簡單的原型模塊就完成了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ?前提是用react-native init 工程名 已經(jīng)初始化好一個可以正常運行的RN工程(檢驗標準是在手機上可...
    姑蘇風閱讀 5,334評論 2 3
  • 去余姚的第四年,我認識了師父。 師父是安徽人,身高1米75左右,體重卻有160,微胖,所以給人的感覺特別平易近人。...
    煥滅閱讀 846評論 1 2
  • 我在車站等你的時候 秋風正壓著云朵向城市后面的山里去 一個白衣少年從我身邊起身離開 座位下面被遺棄的煙蒂還在燃燒 ...
    馬驥北閱讀 1,212評論 21 41
  • 忽然想到龍舟。千舟并進的場面雖然在上半年,讓人的記憶很深刻。我還憑著依稀的記憶畫了龍頭。每艘龍舟都會有一個背對前進...
    oulan閱讀 172評論 0 0

友情鏈接更多精彩內(nèi)容