美文网首页
React Native 参数传递

React Native 参数传递

作者: TroyZhang | 来源:发表于2017-06-05 17:20 被阅读848次

总结

方式 说明
props props一般适用于父子页面通过 navigation导航时来传值
RCTRootView初始化时initialProperties参数
NativeEventEmitter 适用于nativejs传值,也适用于jsjs传值
1)在nativeModule中指定事件名称
2)js端监听事件,并处理
3)native或者js端触发事件并传递参数,执行到上述2)中的监听
RCTDeviceEventEmitter 简单易用
mobxjsredux 专业的应用程序状态管理库

props 传值

props传值很简单,通常用于 navigation 父子页面间传值

NativeEventEmitter 传值

Native 声明支持 event

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>

@interface TravelRNModule : RCTEventEmitter <RCTBridgeModule>
@end

@implementation TravelRNModule
- (NSArray<NSString *> *)supportedEvents
{
    // 声明支持 `pageParameterEvent` 事件
    return @[@"pageParameterEvent"];
}
@end

js 端监听事件

import React, { Component } from 'react';
import {
    NativeEventEmitter,
    EmitterSubscription,
    NativeModules
} from 'react-native';

export default class MyComponent1 extends Component
{
    nativeEventEmitter: NativeEventEmitter;
    pageParameterEventSub: EmitterSubscription;
    
    constructor(props)
    {
        super(props);
        this.nativeEventEmitter = new NativeEventEmitter(NativeModules.TravelRNModule);
        // 注册事件监听
        this.pageParameterEventSub = this.nativeEventEmitter.addListener('pageParameterEvent', (parameters)=>{
            // 接收事件参数并处理
            console.log("receive native event: pageParameterEvent" + JSON.stringify(parameters));
        });
    }
}

native 端触发事件

[self sendEventWithName:@"pageParameterEvent" body:@{@"name": @"Troy"}];

js 端触发事件

import React, { Component } from 'react';
import {
    NativeEventEmitter,
    NativeModules
} from 'react-native';

export default class MyComponent2 extends Component
{
    constructor(props)
    {
        super(props);
        this.fireEvent = this.fireEvent.bind(this);
    }
    render()
    {
        return (
            <TouchableOpacity onPress={()=>{this.fireEvent}}>
                <Text>触发事件传值</Text>
            </TouchableOpacity>
        );
    }
    fireEvent()
    {
        let nativeEventEmitter = new NativeEventEmitter(NativeModules.TravelRNModule);
        
        // 触发事件
        nativeEventEmitter.emit("pageParameterEvent", {"name": "Troy"});
    }
}

RCTDeviceEventEmitter

import RCTDeviceEventEmitter from 'RCTDeviceEventEmitter';

// 监听事件
RCTDeviceEventEmitter.addListener("userUpdatedEvent",(o)=>{
    console.log(JSON.stringify(o));
});

// 触发事件
RCTDeviceEventEmitter.emit("userUpdatedEvent", {"name": "Troy Zhang"});

mobxjs

// 待续

相关文章

网友评论

      本文标题:React Native 参数传递

      本文链接:https://www.haomeiwen.com/subject/iitwfxtx.html