React Native和iOS原生方法交互
来源:互联网 发布:java 线程池 队列大小 编辑:程序博客网 时间:2024/06/05 04:16
原生传递参数给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端:
- 首先需要调用的原生方法需要实现
RCTBridgeModule
协议 - 类实现中需要添加
RCT_EXPORT_MODULE()
的宏 - 通过
RCT_EXPORT_METHOD()
宏 来实现需要导出 javascript 的方法
@implementation YFTestObjectRCT_EXPORT_MODULE();RCT_EXPORT_METHOD(doSomethingCallback:(NSString *)string callback:(RCTResponseSenderBlock)callback){ NSLog(@"%@",string); callback(@[[NSNull null] ,@[@"test1", @"test2"]]); // 第一个error,第二个回调参数}@end
JS端:
- 需要引用
NativeModules
模块 - 通过
NativeModules.xxx
获取 Native 的类,xxx为Native的类名 - 上一步获取到的 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 端发射消息的代码如下。
- 自定义的模块类头文件要继承自
RCTEventEmitter
。(因为 React 需要调用该类,所以也需要实现RCTBridgeModule
协议) 在 Native 方法中发送消息
[self sendEventWithName:@"MessageName" body:params];
- 在 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
- React Native和iOS原生方法交互
- React Native和原生iOS Objective-C的交互解决方案
- 关于iOS原生和react-native的交互
- React-Native调用iOS原生方法
- React Native 与 原生交互
- React Native 与 原生交互
- React Native 友盟分享和第三方登录iOS(与原生交互)
- React Native 二维码扫描ios(原生交互)
- React Native 原生模块和 JS 模块交互(Android)
- react native之原生和RN的交互
- ios原生集成React Native
- React native和native交互
- (十一)React Native---与原生交互
- react native 与原生之间的交互
- react-native 调用原生方法
- iOS原生项目中集成React Native
- React-Native 原生模块(iOS)调用
- iOS原生项目中集成React Native
- 【BigHereo 20】---T4-《信息系统开发与管理》---系统规划
- 大文件上传进度条实现
- 设有n个正整数,将他们连接成一排,组成一个最大的多位整数
- UPDATE更新某些字段
- html实现一些特殊的符号
- React Native和iOS原生方法交互
- C/C++/Qt软件系统统计运行时间方法详解
- ROS机器人操作系统中级教程 3
- js移动客户端--触摸事件 模拟点击、滑屏事件
- Python爬虫的post请求简单实例
- ROS机器人操作系统中级教程 4
- 设计模式的基础知识
- PHP小程序 获取url链接,url不含.html则自动加上并跳转
- Mysql 查找乱码数据