我在JS中看不到任何iOS Native Module

时间:2018-02-22 16:24:27

标签: ios swift react-native native-module

我对React有一些经验,但我是React Native的新手。 我已经玩了一段时间,但是当我尝试为iOS编写基本的本机模块时,我陷入了困境。我已经尝试过Swift和Objective C.(我有一些Swift的基本经验,但Objective C对我来说是全新的)

某些背景信息:

  1. 项目是使用react-native-cli 2.0.1
  2. 创建的
  3. 我使用XCode 9.1
  4. 这是.swift类

    import Foundation
    
    @objc(Something)
    class Something: NSObject {
    
      @objc
      func printSomething() -> Void {
        print("Something")
      }
    }
    

    这是桥文件

    #import <Foundation/Foundation.h>
    #import <React/RCTBridgeModule.h>
    
    @interface RCT_EXTERN_MODULE(Something, NSObject)
    
    RCT_EXTERN_METHOD(printSomething)
    
    @end
    

    Project-Brigding-Header.h

    //
    //  Use this file to import your target's public headers that you would like to expose to Swift.
    //
    
    #import <React/RCTBridgeModule.h>
    

    我的App.js文件

    ...
    import { NativeModules } from 'react-native';
    ...
    type Props = {};
    export default class App extends Component<Props> {
      componentDidMount() {
        console.log('NativeModules: ', NativeModules);
      }
    ...
    }
    

    这是问题所在。 console.log()的输出表示NativeModules是一个空对象:

    2018-02-22 18:19:04.590 [info][tid:com.facebook.react.JavaScript] 'NativeModules', {}
    2018-02-22 18:19:04.589970+0200 velimo_app_rn[14748:400982] 'NativeModules', {}
    

    我不明白我做错了什么。我已经阅读了几乎只能找到与主题相关的内容,但我无法看到自己做错了什么。 如果您有任何建议,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:0)

解决方案是记录模块名称console.log(NativeModules.Something),而不是整个NativeModules对象。我的设置没有任何问题。

答案 1 :(得分:0)

如果您对本地iOS代码进行了更改,则需要通过以下方式重建项目: 重新运行npx react-native run-ios并重新启动服务器npx react-native start

我还在模拟器中重新启动了该应用程序。