在React Native中将Native Bridge模块导入javascript

时间:2017-01-07 22:49:09

标签: android mobile react-native

我想将我本地编写的模块(java,Android)导入到我的React Native源代码中,在JS中。

我将依赖项加载到:android/app/libs/dependencies.jar 我已将模块创建为android/app/src/main/java/com/rctcognito/

除了一些源文件,我还有模块和软件包。

该模块正在实现以下类: public class Cognito extends ReactContextBaseJavaModule

这是包类:

package com.rctcognito;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class RCTCognitoPackage implements ReactPackage {

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

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

    @Override
    public List<NativeModule> createNativeModules( ReactApplicationContext reactContext) {
            List<NativeModule> modules = new ArrayList<>();
            modules.add(new Cognito(reactContext));
            return modules;
    }
}

然后,我通过添加新包更新了MainApplication.javaimport com.rctcognito.RCTCognitoPackage; 并将其添加到列表中: new RCTCognitoPackage(),

考虑到React-Native的官方文档,我应该能够像这样加载它:

import { NativeModules } from 'react-native';
module.exports = NativeModules.Cognito;
import Cognito from './Cognito';

但是我的应用无法加载./Cognito。你知道我可能做错了吗? 非常感谢!

2 个答案:

答案 0 :(得分:1)

这不是它的工作原理。

所有本机模块都通过React Native提供的NativeModules子模块公开。

这是正确的用法。

import { NativeModules } from 'react-native';

const { Cognito } = NativeModules;

继续并执行简单console.log(NativeModules)以查看从本机代码库中公开的内容。

答案 1 :(得分:0)

有两种方法可以做到这一点:

创建文件Cognite.js

    Dim i As Integer
    Dim FndRng As Range, c As Range

    'i = Application.Match(Me.UsernameComboBox.Value, Sh.Range("B:B"), 0)
    Set FndRng = Sh.Range("B11:B" & Sh.Range("B" & Application.Rows.Count).End(xlUp).Row)
    Set c = FndRng.Find(Me.UsernameComboBox.Value, , LookIn:=xlValues)
    If Not c Is Nothing Then
        i = c.Row
        Else
        MsgBox "Not found"
        Exit Sub
    End If

然后通过以下方式将其导入所需的位置:

import {NativeModules} from 'react-native';
module.exports = NativeModules.Cognite;

另一种方法是直接导入:

import Cognite from './Cognite';

您可以签出可在iOS和Android上使用的React Native Bridge-> https://medium.com/@abhisheknalwaya/react-native-bridge-for-ios-and-android-43feb9712fcb