React Native和iOS原生方法交互

原生传递参数给React Native

初始化时传值

- (instancetype)initWithBundleURL:(NSURL *)bundleURL
                       moduleName:(NSString *)moduleName
                initialProperties:(NSDictionary *)initialProperties
                    launchOptions:(NSDictionary *)launchOptions;

通过初始化方法中的 initialProperties 可以给 RCTRootView 传值

appProperties传值

同上面的方法类似,只是不是在初始化时传值,在设置 appProperties 之后,React Native应用将会根据新的属性重新渲染。当然,只有在新属性和之前的属性有区别时更新才会被触发。

/**
 * The properties to apply to the view. Use this property to update
 * application properties and rerender the view. Initialized with
 * initialProperties argument of the initializer.
 *
 * Set this property only on the main thread.
 */

@property (nonatomic, copy, readwrite) NSDictionary *appProperties;

传递的参数为OC的字典类型,在js中可以通过属性值.props访问字典的key,就可以取到参数值

React Native执行原生方法

Native端:

  1. 首先需要调用的原生方法需要实现 RCTBridgeModule 协议
  2. 类实现中需要添加 RCT_EXPORT_MODULE() 的宏
  3. 通过 RCT_EXPORT_METHOD()宏 来实现需要导出 javascript 的方法
@implementation YFTestObject

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(doSomethingCallback:(NSString *)string callback:(RCTResponseSenderBlock)callback)
{
  NSLog(@"%@",string);
  callback(@[[NSNull null] ,@[@"test1", @"test2"]]); // 第一个error,第二个回调参数
}
@end

JS端:

  1. 需要引用 NativeModules 模块
  2. 通过 NativeModules.xxx 获取 Native 的类,xxx为Native的类名
  3. 上一步获取到的 Native 类,调用 Native 中导出的方法
render() {
    return (
      <View style={styles.container}> 
        <TouchableHighlight onPress={()=>testObject.doSomethingCallback('点击按钮(回调)', (error,events)=>{
                 if (error) {
                   console.error(error);
                 } else {
                   console.log(events);
                 }
           })}>
          <Text style={styles.welcome}>点击(回调)</Text>
        </TouchableHighlight>
      </View>
    );
  }

如果需要Natvie方法回调,需要将导出的方法增加RCTResponseSenderBlock类型的参数,该参数则为方法的回调方法

原生调用React Native方法

之前可以使用sendAppEventWithName:body:方法,但是已经废弃了。在0.28版本之后,iOS 向 JS 端发射消息的代码如下。

  1. 自定义的模块类头文件要继承自RCTEventEmitter。(因为 React 需要调用该类,所以也需要实现 RCTBridgeModule 协议)
  2. 在 Native 方法中发送消息

    [self sendEventWithName:@"MessageName"
                       body:params];
  3. 在 React 方法中监听消息(需要在 componentWillUnmount 中移除监听)
var nativeBridge = NativeModules.YourClassName;// 你的类名
const nativeModule = new NativeEventEmitter(nativeBridge);
...

componentDidMount(){
    nativeModule.addListener('MessageName',(data)=>this._method(data));
}

简单的Demo:https://github.com/wf96390/YFReactNativeDemo

参考:
http://www.cnblogs.com/wujy/p/5864591.html
http://blog.csdn.net/xiangzhihong8/article/details/75092576

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Native 是一个用于构建移动应用的开源框架,它允许开发者使用 JavaScript 和 React 的知识来构建原生移动应用。通过使用 React Native,开发者可以在不同平台上共享代码,并且可以访问设备的原生功能,例如相机、位置服务和推送通知等。 在 React Native 中,原生代码分析是指开发者需要编写一些原生代码来处理特定的功能,例如需要调用 Android 或 iOS 平台特定的 API 来实现某些功能。在 React Native 中,开发者经常需要在 JavaScript 代码和原生代码之间进行交互,这就需要进行原生代码分析。 在进行 React Native 原生代码分析时,开发者需要了解不同平台的编程语言和工具,例如 Android 平台需要使用 Java 或 Kotlin 进行编码,iOS 平台需要使用 Objective-C 或 Swift 进行编码。开发者需要深入了解各个平台的相关知识,并且需要在 React Native 应用中集成原生模块时,需要编写相应的原生代码。 另外,开发者需要了解如何在 React Native 代码中调用原生代码,以及如何在原生代码中调用 React Native 模块。这需要开发者对跨平台应用程序开发有一定的了解,以便能够在 React Native 中进行原生代码分析。 总的来说,React Native原生代码分析需要开发者掌握跨平台开发的知识和技能,同时还需要对各个平台的原生开发有一定的了解,这样才能够高效地在 React Native 应用中进行原生代码分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值