我在 JS 中看不到任何 iOS 本机模块
I can't see any iOS Native Module in JS
我有一些 React 经验,但我是 React Native 的新手。
我玩了一段时间,但是当我试图为 iOS 编写一个基本的本机模块时,我卡住了。 Swift 和 Objective C 我都试过了。 (我对 Swift 有一些基本的经验,但是 Objective C 对我来说是全新的)
一些上下文:
- 项目是用
react-native-cli 2.0.1
创建的
- 我用
XCode 9.1
这是.swift class
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
以及项目-桥接-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', {}
我不明白我做错了什么。我已经阅读了几乎所有我能找到的与该主题相关的内容,但我看不出我做错了什么。
如果您有任何建议,请告诉我。谢谢!
解决方案是记录模块名称 console.log(NativeModules.Something)
,而不是整个 NativeModules 对象。我的设置没有任何问题。
如果您对本机 iOS 代码进行了更改,则需要通过以下方式重建项目
重新运行 npx react-native run-ios
并重新启动服务器 npx react-native start
。
我还在模拟器中重新启动了应用程序。
我有一些 React 经验,但我是 React Native 的新手。 我玩了一段时间,但是当我试图为 iOS 编写一个基本的本机模块时,我卡住了。 Swift 和 Objective C 我都试过了。 (我对 Swift 有一些基本的经验,但是 Objective C 对我来说是全新的)
一些上下文:
- 项目是用
react-native-cli 2.0.1
创建的
- 我用
XCode 9.1
这是.swift class
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
以及项目-桥接-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', {}
我不明白我做错了什么。我已经阅读了几乎所有我能找到的与该主题相关的内容,但我看不出我做错了什么。 如果您有任何建议,请告诉我。谢谢!
解决方案是记录模块名称 console.log(NativeModules.Something)
,而不是整个 NativeModules 对象。我的设置没有任何问题。
如果您对本机 iOS 代码进行了更改,则需要通过以下方式重建项目
重新运行 npx react-native run-ios
并重新启动服务器 npx react-native start
。
我还在模拟器中重新启动了应用程序。