我们可以通过使用RCT_EXPORT_VIEW_PROPERTY导出本机属性来控制自定义本机UI组件的属性.

但是如何导出本机UI组件的实例方法呢?

推荐答案

多亏了@alinzsuggestion.

这可以在自定义本机组件的视图管理器中完成.

  1. Obj-c端:在本机视图管理器中,公开如下本机方法:

关键是传入reactTag,这是对本机组件的引用.

MyCoolViewManager.m:

RCT_EXPORT_METHOD(myCoolMethod:(NSNumber *)reactTag callback:(RCTResponseSenderBlock)callback) {
  [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
    MyCoolView *view = viewRegistry[reactTag];
    if (![view isKindOfClass:[MyCoolView class]]) {
      RCTLogMustFix(@"Invalid view returned from registry, expecting MyCoolView, got: %@", view);
    }
    // Call your native component's method here
    [view myCoolMethod];
  }];
}
  1. JS端:在react组件类中添加API:

MyCoolView.js:

var React = require('react-native');
var NativeModules = require('NativeModules');
var MyCoolViewManager = NativeModules.MyCoolViewManager;
var findNodeHandle = require('findNodeHandle');

class MyCoolView extends React.Component{
    // ...
    myCoolMethod() {
        return new Promise((resolve, reject) => {
            MyCoolViewManager.myCoolMethod(
                findNodeHandle(this),
                (error, result) => {
                    if (error) {
                        reject(error);
                    } else {
                        resolve(result);
                    }
                }
            );
        });
    }
}

React-native相关问答推荐

React Native 无法下载模板

如何在底部标签导航中添加顶部标签

React Native:如何以编程方式对图像进行黑白过滤?

React Native TextInput 在android上打开时会自动关闭

无法在 M1 zsh 上运行 adb segmentation fault adb

React Native:在 ScrollView contentContainerStyle 上设置 flex:1 会导致组件重叠

什么时候适合在 React 中使用构造函数?

React Native 上传到 S3 存储空间

submit提交后如何让 React Native TextInput 保持焦点?

使用直接在 Windows 中运行的模拟器在 WSL 中运行 React Native

React-Native Android 中隐藏(hide)的元素溢出

如何在react native中过滤对象数组?

当组件在react-native 中重新呈现时,动态不透明度不会改变

如何在 React Native 中创建对角线边框?

react-native run-android 构建错误':app:generateDebugBuildConfig'

加载远程图像失败后加载本map像

Unexpected token on "export default const"

react-native 元素/目录 struct 设置

React Native Android 负边距(Margins)

Android 是否支持 React Native 的 LayoutAnimation?