iOS原生和React-Native之间的交互2
今天看下iOS原生->RN:
这里有个问题:
* 我这里只能通过rn->ios->rn来是实现
* 如果想直接ios-rn 那个iOS中的CalendarManager的self.bridge是nil,只有先通过rn-ios之后该值才有值.
* 这里没搞明白
如果你研究通了,希望留言告诉我
直接撸代码:
RN:
/**
* Sample React Native App
* https://github.com/facebook/react-native
* @flow
* iOS调用RN:
* 我这里只能通过rn->ios->rn来是实现,
* 如果想直接ios-rn 那个iOS中的CalendarManager的self.bridge是nil,只有先通过rn-ios之后该值才有值.
* 这里没搞明白
*/ import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
NativeModules,
NativeAppEventEmitter
} from 'react-native';
var nativeAppEv;
var CalendarManager = NativeModules.CalendarManager;
export default class NativeAddRN extends Component {
// 构造
constructor(props) {
super(props);
// 初始状态
this.state = {
str:''
};
}
render() {
if(this.state.str == '少停'){
return (
<View style={styles.container}>
<Text style={styles.welcome}>
少停
</Text>
</View>
);
}else {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
shaoting
</Text>
</View>
);
} } componentWillMount() { } componentWillMount() {
CalendarManager.RNCallOC();
nativeAppEv= NativeAppEventEmitter.addListener(
'EventReminder',
(reminder) => {
this.setState({
str:reminder
})
}
); } componentWillUnmount() {
nativeAppEv.remove();
}
} const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
}); AppRegistry.registerComponent('NativeAddRN', () => NativeAddRN);
iOS原生:
新建一个类CalendarManager,继承于NSObject,实现协议<RCTBridgeModule>
//
// CalendarManager.h
// rnAndN
//
// Created by Shaoting Zhou on 2017/2/10.
// Copyright © 2017年 Facebook. All rights reserved.
// #import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTLog.h>
@interface CalendarManager : NSObject<RCTBridgeModule> @end
//
// CalendarManager.m
// rnAndN
//
// Created by Shaoting Zhou on 2017/2/10.
// Copyright © 2017年 Facebook. All rights reserved.
// iOS调用原生:
// 我这里只能通过rn->ios->rn来实现,
// 如果想直接ios-rn 那个iOS中的CalendarManager的self.bridge是nil,只有先通过rn-ios之后该值才有值.
// 这里没搞明白
// #import "CalendarManager.h"
#import "RCTBridge.h"
#import "RCTEventDispatcher.h"
@implementation CalendarManager
RCT_EXPORT_MODULE();
@synthesize bridge = _bridge; RCT_EXPORT_METHOD(RNCallOC){
// [self.bridge.eventDispatcher sendAppEventWithName:@"EventReminder" body:@"少停"];
[self.bridge.eventDispatcher sendAppEventWithName:@"EventReminder" body:@"shaoting"]; }
@end
效果就是RN可以收到上面这段代码发过去的值:[self.bridge.eventDispatcher sendAppEventWithName:@"EventReminder" body:@"shaoting"];
现在传参数是好了,至于iOS调用RN的方法,以后有时间再弄一下吧.该回到原生开发了.
演示效果和demo源码:https://github.com/pheromone/IOS-native-and-React-native-interaction
iOS原生和React-Native之间的交互2的更多相关文章
- iOS原生 和 react native视图混编
在iOS原生功能中加入RN,请看之前 写的 RN与iOS交互系列文章.本篇只讲下视图混编. 关键点只有二: 1.通过 RCTRootView 加载RN视图. 2.RN中,只需要AppRegistry. ...
- 一个资深iOS开发者对于React Native的看法
一个资深iOS开发者对于React Native的看法 当我第一次尝试ReactNative的时候,我觉得这只是网页开发者涉足原生移动应用领域的歪门邪道. 我认为一个js开发者可以使用javasc ...
- 现有iOS项目集成React Native过程记录
在<Mac系统下React Native环境搭建>配置了RN的开发环境,然后,本文记录在现有iOS项目集成React Native的过程,官方推荐使用Cocoapods,项目一开始也是使用 ...
- iOS 写给iOS开发者的React Native学习路线(转)
我是一名iOS开发者,断断续续一年前开始接触React Native,最近由于工作需要,专职学习React Native也有一个多月了.网络上知识资源非常的多,但能让人豁然开朗.迅速学习的还是少数,我 ...
- 写给iOS开发者的React Native学习路线(转)
我是一名iOS开发者,断断续续一年前开始接触React Native,最近由于工作需要,专职学习React Native也有一个多月了.网络上知识资源非常的多,但能让人豁然开朗.迅速学习的还是少数,我 ...
- [转] 一个资深iOS开发者对于React Native的看法
当我第一次尝试ReactNative的时候,我觉得这只是网页开发者涉足原生移动应用领域的歪门邪道. 我认为一个js开发者可以使用javascript来构建iPhone应用确实是一件很酷的事情,但是我很 ...
- Android原生嵌入React Native
1.首先集成的项目目录 我使用的是直接按照react-native init Project 的格式来导入的,也就是说,我的Android项目目录是跟node_modules是在一个目录下的. 我们i ...
- Flutter介绍 - Flutter,H5,React Native之间的对比
Flutter介绍 Flutter是Google推出的开源移动应用开发框架.开发者可以通过开发一套代码同时运行在iOS和Android平台. 它使用Dart语言进行开发,并且最终编译成各个平台的Nat ...
- 《React Native 精解与实战》书籍连载「iOS 平台与 React Native 混合开发」
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
- 【React Native】在原生和React Native间通信(RN调用原生)
一.从React Native中调用原生方法(原生模块) 原生模块是JS中也可以使用的Objective-C类.一般来说这样的每一个模块的实例都是在每一次通过JS bridge通信时创建的.他们可以导 ...
随机推荐
- Linux 命令查询工具
http://man.linuxde.net/traceroute http://man.linuxde.net/ping http://man.linuxde.net/nslookup 等等
- php分页、正则验证
//原装分页<?phpheader("Content-type:text/html;Charset=utf8"); $link=mysqli_connect("lo ...
- docker实战系列之搭建rabbitmq
1.搜索镜像[注:因为我这里采用的是阿里云镜像加速器,所以我直接在阿里云中搜索相关镜像路径],点击"详情"查看公网拉取路径 2.拉取镜像 docker pull registry. ...
- IIS无法启动,应用程序池自动关闭
问题:打开网站中的资源,对应的应用程序池就自动停止 解决方案:在应用程序池上--右键--高级设置--进程模型--标识,更改了这项里的“内置账户”.将原有的“ApplicationPoolIdentit ...
- Oracle中使用PL/SQL如何定义参数、参数赋值、输出参数和 if 判断
1.pl/sql如何定义参数 declare --1)定义参数 -- ban_Id number; ban_Name ); 2.pl/sql如何参数赋值 --2)参数赋值-- ban_Id :; ba ...
- Laravel 更新数据时在表单请求验证中排除自己,检查指定字段唯一性
原文地址:https://moell.cn/article/24 不错的laravel网站 需求场景 修改用户信息时,在表单请求验证中排除当前邮箱所在的记录行,并检查邮箱的唯一性. Laravel版本 ...
- linux初始化宏__init, __exit
我们在内核中经常遇到初始化函数是这样定义的:static int __init init_func(); ,与普通函数相比,定义中多了__init.那么,__init是什么意思呢?还有与其匹配的__e ...
- day04_python_1124
01 上周内容回顾 int bool str int < --- > str: i1 = 100 str(i1) s1 = '10' int(s1)字符串必须是数字组成. in ...
- UVA 11990 `Dynamic'' Inversion CDQ分治, 归并排序, 树状数组, 尺取法, 三偏序统计 难度: 2
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- bzoj5016
题解: 吧询问变成前缀形式 然后莫队 代码: #include<bits/stdc++.h> ; using namespace std; ]; ,L=,R=; ,Ans[N]; bool ...