RN互動iOS

lqkin發表於2019-02-28

RN與原生iOS互動有傳值 通知 第一種RN傳值iOS

原生程式碼
RCT_EXPORT_MODULE() 匯出模組
RCT_EXPORT_METHOD(RNOpenVC:(NSString *)msg){} 匯出函式名以及引數
import{NativeModules}
const xxx = NativeModules.'模組名稱';
xx.RNOpenVC(('xxxx'));
複製程式碼

第二種

通知
原生程式碼
原生類檔案繼承:RCTEventEmitter<RCTBridgeModule>
RCT_EXPORT_MODULE(); //匯出模組
//新增通知名稱
- (NSArray<NSString *> *)supportedEvents {
  return @[@"locationCenterEvent",
           @"decompileAddressEvent",
           @"onClickDetailPage",
           @"onPressMarkDetailinfo",
           @"onTagFuncationIndex",
           @"onPressPrivateChat",
           @"onPressChildPageDetailinfo",
           @"chlidPagelocation",
           @"onPressHeadPersonalPageClick",
           @"onPressMapSearchClick"]; //這裡返回的將是你要傳送的訊息名的陣列。
}
//新增監聽通知方法(注意: 函式名字不可隨意改變)
- (void)startObserving{
    //點選進入搜尋
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(onPressMapSearchClick:)
    name:@"onPressMapSearchClick"
    object:nil];
}
//實現通知方法
- (void)onPressMapSearchClick:(NSNotification *)notify{
    [self sendEventWithName:@"onPressMapSearchClick"  body:@{ @"code": @"1",
    @"result": notify.object, }];
}
//停止監聽通知(移除通知)
- (void)stopObserving{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

RN程式碼
複製程式碼

import { NativeModules, NativeEventEmitter,} //呼叫通知模組 const tagEventEmitter = NativeModules.tagEventEmitter; const tagEventEmitters = new NativeEventEmitter(tagEventEmitter);

監聽方法
 //搜尋跳轉
  this.onPressMapSearchClick = tagEventEmitters.addListener('onPressMapSearchClick', (obj) => {
    this.props.navigation.navigate('Search');
  });
  
  //移除通知
 componentWillUnmount() {
    this.onPressMapSearchClick.remove();
}
以上便是專案種使用到的RN與原生互動方式,其他互動方式敬請期待。。。。。複製程式碼

相關文章