6

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

一些上下文:

  1. 该项目是用react-native-cli 2.0.1
  2. 我用XCode 9.1

这是 .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', {}

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

4

2 回答 2

4

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

于 2018-02-23T08:35:27.160 回答
0

如果您对原生 iOS 代码进行了更改,则需要通过重新运行npx react-native run-ios并重新启动服务器来重建项目npx react-native start

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

于 2020-11-03T22:01:34.617 回答