ReactNative前端與原生事件交互----原生向JavaScript端發(fā)送事件

一、點(diǎn)擊頁面按鈕硫嘶,原生向JavaScript端發(fā)送事件

第一步:創(chuàng)建MyModule

public class MyModule extends ReactContextBaseJavaModule {

    public MyModule(ReactApplicationContext reactContext) {

        super(reactContext);

        //給上下文對象賦值
        Test.myContext=reactContext;
    }

    @Override
    public String getName() {

        return "MyModule";
    }


    @ReactMethod
    public void  NativeMethod()
    {
        //調(diào)用Test類中的原生方法。
        new Test().fun();
    }
}

第二步:創(chuàng)建MyPackage

public class MyPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {

        List<NativeModule> modules=new ArrayList<>();
        modules.add(new MyModule(reactContext));

        return modules;
    }

    @Override
    public List<Class<? extends JavaScriptModule>> createJSModules() {
        return Collections.emptyList();
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}

第三步:創(chuàng)建Test

public class Test {

     //定義上下文對象
    public static ReactContext myContext;

    //定義發(fā)送事件的函數(shù)
    public  void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params)
    {
        System.out.println("reactContext="+reactContext);

        reactContext
                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit(eventName,params);
    }

    public  void fun()
    {
        //在該方法中開啟線程情连,并且延遲3秒蛔外,然后向JavaScript端發(fā)送事件冀值。
        new Thread(new Runnable() {
            @Override
            public void run() {

                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

               //發(fā)送事件,事件名為EventName
                WritableMap et= Arguments.createMap();
                sendEvent(myContext,"EventName",et);


            }
        }).start();

    }


}


第四步:index.android.js中處理

import React, { Component } from 'react';
import {
 AppRegistry,
  StyleSheet,
  Text,
  DeviceEventEmitter,
  NativeModules,
  View
} from 'react-native';

export default class ReactAndroid extends Component {

    componentWillMount(){  
                      //監(jiān)聽事件名為EventName的事件
                    // DeviceEventEmitter.addListener('EventName', function() {  
                         
                    //      this.showState();

                    //      alert("send success");  
                    //      // this.showState();

                    //    }); 

                    DeviceEventEmitter.addListener('EventName', ()=> {  
                         
                         this.showState();
                         alert("send success");  

                       }); 
                
}

  constructor(props) {
    super(props);
    this.state = {
        content: '這個是預(yù)定的接受信息',
    }
}

  render() {
    return (
      <View style={styles.container}>

        <Text style={styles.welcome}
         onPress={this.callNative.bind(this)}
        >
          當(dāng)你點(diǎn)我的時候會調(diào)用原生方法姆怪,原生方法延遲3s后會向前端發(fā)送事件叛赚。
          前端一直在監(jiān)聽該事件,如果收到稽揭,則給出alert提示!
        </Text>
        
        <Text style={styles.welcome} >
        {this.state.content}
         </Text>


      </View>
    );
  }

  callNative()
  {
    NativeModules.MyModule.NativeMethod();
  }
 
  showState()
  {
       this.setState({content:'已經(jīng)收到了原生模塊發(fā)送來的事件'})
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

AppRegistry.registerComponent('ReactAndroid', () => ReactAndroid);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俺附,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淀衣,更是在濱河造成了極大的恐慌,老刑警劉巖召调,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膨桥,死亡現(xiàn)場離奇詭異蛮浑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)只嚣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門沮稚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人册舞,你說我怎么就攤上這事蕴掏。” “怎么了调鲸?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵盛杰,是天一觀的道長。 經(jīng)常有香客問我藐石,道長即供,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任于微,我火速辦了婚禮逗嫡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘株依。我一直安慰自己驱证,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布恋腕。 她就那樣靜靜地躺著抹锄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吗坚。 梳的紋絲不亂的頭發(fā)上祈远,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機(jī)與錄音商源,去河邊找鬼车份。 笑死,一個胖子當(dāng)著我的面吹牛牡彻,可吹牛的內(nèi)容都是我干的扫沼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼庄吼,長吁一口氣:“原來是場噩夢啊……” “哼缎除!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起总寻,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤器罐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渐行,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轰坊,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铸董,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肴沫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粟害。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颤芬,靈堂內(nèi)的尸體忽然破棺而出悲幅,到底是詐尸還是另有隱情,我是刑警寧澤站蝠,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布汰具,位于F島的核電站,受9級特大地震影響沉衣,放射性物質(zhì)發(fā)生泄漏郁副。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一豌习、第九天 我趴在偏房一處隱蔽的房頂上張望存谎。 院中可真熱鬧,春花似錦肥隆、人聲如沸既荚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恰聘。三九已至,卻和暖如春吸占,著一層夾襖步出監(jiān)牢的瞬間晴叨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工矾屯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兼蕊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓件蚕,卻偏偏與公主長得像孙技,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子排作,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

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

  • 大部分的后端會很很鄙視前端牵啦。我也不知道為什么,可能大部分人都會覺得腳本語言根本不算語言妄痪。 大多人 會叫我們切圖仔哈雏,...
    小黑的眼閱讀 3,340評論 0 15
  • 前些日子從@張鑫旭微博處得一份推薦(Front-end-tutorial),號稱最全的資源教程-前端涉及的所有知識...
    谷子多閱讀 4,196評論 0 44
  • 回校以來,家人都會出現(xiàn)在夢里裳瘪。今天最奇怪的夢(可能其他的忘了)是和哥哥一起參加自行車比賽履因。 在山間的路上比賽,比賽...
    風(fēng)雪7緣閱讀 162評論 0 0
  • 今日立冬盹愚,冬天已破門而入。門外站故,還依稀可見秋落葉紛飛的背影皆怕。 盡管如此喜歡秋,但冬天來了西篓,就思慕著冬天吧愈腾,觸摸冬天...
    如月如月閱讀 991評論 6 15
  • 我知道自己一定活不下去了。過度使用的寫輪眼已經(jīng)一片模糊岂津,透支的查克拉連一個火遁都發(fā)不出來虱黄,至少三種致命傷,即使最好...
    蒼煙落照閱讀 350評論 0 1