Реагировать на собственные нативные модули с быстрым получением значения экспортируемого метода как неопределенного? - PullRequest
2 голосов
/ 07 февраля 2020

Я создаю собственный модуль, используя create-Reaction-native-module с помощью swift. После этого я последовал реакции родной официальной документации на установку iOS. do c ссылка :: https://facebook.github.io/react-native/docs/native-modules-ios

Я создал create-реакции-native-модуль с примером. Я просто добавляю простую функцию с возвращением строки «Hello World» внутри моего собственного модуля.

Мой 'CustomModule-Bridging-Header.h' ::

#import <React/RCTBridgeModule.h>

Мой 'CustomModule.m '::

#import <React/RCTBridgeModule.h>

@interface RCT_EXTERN_MODULE(CustomModule, NSObject)

RCT_EXTERN_METHOD(sampleMethod)

+ (BOOL) requiresMainQueueSetup {
  return YES;
}

@end

Мой' CustomModule.swift ':

import Foundation

@objc(CustomModule)
class CustomModule: NSObject {
  @objc(sampleMethod)
  func sampleMethod() -> String {
      return "Hello World"
  }
}

После внесения этих изменений в собственный модуль я снова установил зависимости внутри примера. Теперь мое приложение. js выглядит как ::

import React, { Component } from 'react';
import { Platform, Text, View } from 'react-native';
import CustomModule from 'react-native-custom-module';

export default class App extends Component {
    state = {
        message: '--'
    };

    async componentDidMount() {
        const msg = await CustomModule.sampleMethod();
        console.log('javascript calling msg::', msg);
        this.setState({
            message: msg
        });
    }
    render() {
        return (
            <View>
                <Text>CustomModule example☆</Text>
                <Text>{this.state.message}</Text>
            </View>
        );
    }
}

Здесь я получаю значение "msg" как неопределенное. Пожалуйста, помогите!

1 Ответ

1 голос
/ 21 февраля 2020

Вам нужно использовать обещание или обратный вызов для возврата значения из встроенной функции. Просто возвращаемое значение не работает.

Пример использования обещания:

CustomModule.swift

@objc
func sampleMethod(_ resolve: RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) {
  resolve("Hello World")
}

CustomModule.m

RCT_EXTERN_METHOD(sampleMethod: (RCTPromiseResolveBlock)resolve rejecter: (RCTPromiseRejectBlock)reject)
...