1

即使在尝试手动链接多个不同时间后,我仍然在将库链接到 react-native 项目时遇到问题。我已经完成了大量“称赞”的教程,但都没有成功。

我不是 Objective-C/iOS-native 方面的专家,所以为了隔离问题,我决定创建一个 HelloWorld 库和一个 HelloWorld react-native 项目。

使用:

  • 反应原生 v0.41.2
  • react-native-cli v2.0.1
  • react-native-create-library v1.0.4
  • xcode v8.2.1

我做了以下事情:

  1. react-native-create-library Lib.
  2. react-native init RNLibTest.
  3. “成功链接”(手动尝试和react-native link ...

这是代码:

RNLib

// ./ios/RNLib.h
#import <React/RCTBridgeModule.h>

@interface RNLib : NSObject <RCTBridgeModule>

@end



// ./ios/RNLib.m
#import "RNLib.h"

@implementation RNLib

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(helloWorld:(NSString *)world)
{
  return [NSString stringWithFormat:@"hello %@", world];
}

@end



// ./index.js
import { NativeModules } from 'react-native';

const { RNLib } = NativeModules;
console.log(RNLib); // undefined
console.log(NativeModules); // Object: RNLib NOT included

export default RNLib;

HelloWorld / RNLibTest

// index.ios.js

import React, { Component } from 'react';
import { AppRegistry, Text, View } from 'react-native';
import RNLib from 'react-native-lib'; // I installed RNLib with npm and then "linked".

export default class RNLibTest extends Component {
  componentDidMount() {
    console.log(RNLib); // undefined
  }

  render() {
    return (
      <View>
        <Text>Hello World</Text>
        <Text>{
          RNLib.helloWorld("world") 
          /* throws error "can't read property helloWorld of undefined" */
        }</Text>
      </View>
    );
  }
}

AppRegistry.registerComponent('RNLibTest', () => RNLibTest);

我的问题:

  1. 如果代码没有错,它可能是由 react-create-native-library 创建的 xcode 项目以某种方式无法与较新版本的 react-native 一起使用吗?
  2. 还有其他人有这些问题吗?如果是这样,你做了什么来修复它?
  3. 如果你没有遇到这个问题,你是用最新版的 react-native 吗?
  4. 您使用的是什么版本的 xcode、react-native-cli 等...?
  5. 是否有人必须降级才能解决此问题?

2017 年 2 月 22 日更新

有一个新版本的 react-native-create-library (v1.1.0) 支持 v0.40+。我再次尝试并更新了上面的代码,但我仍然看到同样的问题。

这是 GitHub 问题的链接。我还将react-native-lib 库LibTest 应用程序上传到 GitHub。

4

2 回答 2

0

不确定是否react-native-create-library支持 0.41 RN 但从代码中我可以说你需要导入RCT*h文件<React/RCTBridgeModule.h>

由于这很好,您可以RNLib.h在 Xcode 中创建一个文件并检查您是否会收到编译时错误

谢谢

于 2017-02-17T20:12:42.500 回答
0

我不知道是什么导致了这个问题,但是随着 react-native 0.42 出来,我决定再试一次。

相同的代码,相同的库,相同的一切,但 react-native 0.42,这些是我的结果:

  1. 使用react-native link=> 工作。
  2. 使用手动安装 => 工作。

我不确定 0.41 发生了什么,但 0.42 没有发生!

于 2017-03-19T01:08:47.283 回答