美文网首页
React native 与Android原生交互方式(三)

React native 与Android原生交互方式(三)

作者: wfunny | 来源:发表于2017-09-27 14:54 被阅读164次

    前言

    上一篇文章介绍了使用callback的方式来进行React native与Android之间的通信,本文将介绍第三种通信方式,即promise的方式。

    Promise方式

    看了上面的回调函数的使用,大家有没有发现上面的写法还有有一些繁琐的?OK , 当然原生模块还可以支持使用Promise,这样可以简化我们编写的代码。如果大家搭配使用ES2016标准的async/await的语法使用会更加好。如果被桥接的原生方法的最后一个参数是一个Promise对象,那么该JS方法会返回一个Promise对象。下面我们使用Promise对象来进行重构之前的回调函数方法。我们来看一下代码是怎么样实现的。本文的代码是基于上一篇文章中的项目代码示例。

    1、原生模块中首先在MyModule类中添加被Rn调用的方法,代码如下:

       @ReactMethod
        public void callNativeByPromise(String msg, Promise promise){
            Log.e("wfunny","called by promise");
    
            // 1.处理业务逻辑...
            String result = "处理结果:" + msg;
            // 2.回调RN,即将处理结果返回给RN
            promise.resolve(result);
        } 
    

    2、React native端在index.android.js中添加调用原生的方法代码,本例子是通过点击文本触发的,代码如下:

    render(){
        return (
          <View style = {myStyles.container}>
            <Text style = {myStyles.welcome} onPress={this.callNative.bind(this)}>
                当你点我的时候会调用原生方法,原生方法延迟3s后会向前端发送事件。
                前端一直在监听该事件,如果收到,则给出alert提示! send 方式
            </Text>
            <Text style = {myStyles.welcome} onPress={this.callNativeByCallBack.bind(this,'callback send ok',null)}>
               callback方式 交互方式!!!!
            </Text>
            <Text style = {myStyles.welcome} onPress={this.callNativePromise.bind(this,'promise send ok',null)}>
               promise方式 交互方式!!!!
            </Text>
            <Text style = {myStyles.instructions}>
                {this.state.content}
            </Text>
    
          </View>
    
        );
    
      }
    
    callNativePromise(msg){
          console.log("js called by promise");
          NativeModules.MyModule.callNativeByPromise(msg).then(
            (result) => {
              this.setState({content:result});
            }
          ).catch((error) =>{
            console.log(error);
          })
      }
    

    从以上代码可以看出,React native 中通过callNativePromise 方法调用原生模块中的callNativeByPromise方法,该方法最后一个参数有一个Promise对象,那么JS调用Native模块的方法就会返回一个Promise对象,咱们用这个对象来将原生处理完毕以后的结果给JS端。

    三种交互方式的比较

    1、RCTDeviceEventEmitter发送事件方式

    优点:可任意时刻传递,Native主导控制。
    缺点:要添加注册监听

    2、Callback回调方式

    优点:JS调用一次,Native返回一次,
    缺点:CallBack为异步操作,返回时机不确定

    3、Promise方式

    优点:JS调用一次,Native返回一次
    缺点:每次使用需要JS调用一次

    至于使用哪种方式根据自己的业务需求来决定,个人觉得相对而言 发送事件的方式缺点相对小一些。

    上一篇:React native 与Android原生交互方式(二)

    相关文章

      网友评论

          本文标题:React native 与Android原生交互方式(三)

          本文链接:https://www.haomeiwen.com/subject/llsdqxtx.html