从本地模块传递字符串以响应本地

时间:2019-07-04 23:25:07

标签: react-native react-native-android

我为Android(使用Kotlin语言)创建了一个本机模块

     exports.handler = async (event, context) => {

             event.Records.forEach(record => {

                const { body }  = record; // the messages from the bus
                promises.push(PromiseCreator(body));

             });  

            try {
                 await Promise.all(promises);
            } catch(err) {
                 return err;
            }


    };    

然后我按照https://facebook.github.io/react-native/docs/native-modules-android.html

的说明将该模块注册到ModulesPackages中,并将其添加到MainApplication.tk中。

在App.js中

class TestModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
    override fun getName(): String {
        return "TestModule"
    }

    @ReactMethod
    fun testing(): String{
        return "my modules"
    }

}

运行此命令后,我希望收到带有“我的模块”文本的警报,但收到带有“未定义”文本的警报

我不知道我做错了什么。当我运行react-native run-android时,我没有看到任何错误或抱怨。

有什么建议我做错了吗?

1 个答案:

答案 0 :(得分:0)

要在本机模块和js模块之间进行通信,您应该调用回调,promise或use事件。就您而言,testing函数可以像

那样进行更改
import com.facebook.react.bridge.Callback;

...

@ReactMethod
fun testing(callback: Callback): Void{
    callback.invoke("my modules")
}

修改

在这种情况下,您应该在js文件中传递回调:

testCallback = (name) => {
    console.log(name);
}

componentDidMount() {
    TestingModule.testing(this.testCallback);
}