美文网首页
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