美文网首页React NativeReact Native
React Native - iOS 导出常量

React Native - iOS 导出常量

作者: 村雨灬龑 | 来源:发表于2017-10-30 14:47 被阅读93次

    导出常量

    原生模块可以导出一些常量,这些常量在JavaScript端随时都可以访问。用这种方法来传递一些静态数据,可以避免通过bridge进行一次来回交互。

    OC中,我们实现constantsToExport方法,如下:

    - (NSDictionary *)constantsToExport {
        return @{ @"Constant1" : @"常量1",
                  @"Constant2" : @"常量2",
                  };
    }
    

    JS中,我们打印一下这个常量

    const constant = NativeModules.原生模块.常量的key;
    console.log("Constant1 value is ", constant);
    

    但是注意这个常量仅仅在初始化的时候导出了一次,所以即使你在运行期间改变constantToExport返回的值,也不会影响到JavaScript环境下所得到的结果。

    枚举常量

    NS_ENUM定义的枚举类型必须要先扩展对应的RCTConvert方法才可以作为函数参数传递。

    假设我们要导出如下的NS_ENUM定义:

    typedef NS_ENUM(NSInteger, UIStatusBarAnimation) {
        UIStatusBarAnimationNone,
        UIStatusBarAnimationFade,
        UIStatusBarAnimationSlide,
    };
    

    你需要这样来扩展RCTConvert类:

    @implementation RCTConvert (StatusBarAnimation)
    RCT_ENUM_CONVERTER(UIStatusBarAnimation, (@{ @"statusBarAnimationNone": @(UIStatusBarAnimationNone),@"statusBarAnimationFade" : @(UIStatusBarAnimationFade),@"statusBarAnimationSlide" : @(UIStatusBarAnimationSlide)}),UIStatusBarAnimationNone, integerValue)
    @end
    

    接着你可以这样定义方法并且导出enum值作为常量:

    - (NSDictionary *)constantsToExport{
        return @{ @"statusBarAnimationNone" : @(UIStatusBarAnimationNone),
                  @"statusBarAnimationFade" : @(UIStatusBarAnimationFade),
                  @"statusBarAnimationSlide" : @(UIStatusBarAnimationSlide)}
    };
    
    RCT_EXPORT_METHOD(updateStatusBarAnimation:(UIStatusBarAnimation)animation completion:(RCTResponseSenderBlock)callback)
    

    你的枚举现在会用上面提供的选择器进行转换(上面的例子中是integerValue),然后再传递给你导出的函数。

    相关文章

      网友评论

        本文标题:React Native - iOS 导出常量

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