【问题标题】:Accessing the same persistent store from Swift and React Native从 Swift 和 React Native 访问相同的持久化存储
【发布时间】:2018-04-08 15:17:06
【问题描述】:

我们正在考虑将 React Native 用于我们的一个屏幕——为了好玩,检查它并更好地掌握可能性,但即使在开始之前我也需要一些答案,所以我们确信 React Native 和它的环境可以满足我们的要求。

在这个问题中,我想特别询问有关持久数据和访问数据的问题。

在我们的应用中,我们专注于离线体验,因为这对我们来说是最关键的一点。在 iOS 上,我们有几种可能性来实现这一点,例如。核心数据、领域……但问题是,如果我们决定将应用程序的某些部分实现为 React Native,我们还需要这些部分来访问存储的数据,甚至修改它并保存到持久存储中。
这可以实现吗?拥有一个持久存储(SQLite、Realm 还是其他东西?)并从 Swift 代码和 React Native 访问它。

【问题讨论】:

  • 我认为您需要编写一些包装器来访问本机库,例如 CoreData,请参阅一些文档 here

标签: ios swift core-data react-native realm


【解决方案1】:

在带有 Native Modules 的 iOS 和 Android 中使用 React Native 非常容易。

您将在 Swift/Obj-C 中构建一个简单的本机模块并公开您的持久存储:

//RCTMyDataStore.h

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

@interface RCTMyDataStore : RCTEventEmitter <RCTBridgeModule>

@end

//  RCTMyDataStore.m

#import "RCTMyDataStore.h"

@implementation RCTMyDataStore {
}

RCT_EXPORT_MODULE(MyDataStore);

RCT_REMAP_METHOD(getMyData,
                 getMyData_resolver:(RCTPromiseResolveBlock)resolve
                 getMyData_rejecter:(RCTPromiseRejectBlock)reject)
{
    // get data from my persistent store

    if (success) {
        // convert to RN passable format (NSDictionary or NSArray)

        resolve(myData);
    } else {
        reject(@"404", @"No data", nil);
    }

}


@end

在您的 React Native 代码中:

import { 
    NativeModules
} from 'react-native';

const NativeDataStore = NativeModules.MyDataStore; // must match the RCT_EXPORT_MODULE name

NativeDataStore.getMyData()
    .then(data => {
        // do some stuff
    })

有关本机模块和 Swift 支持的更多信息,您可以在此处查看文档:https://facebook.github.io/react-native/docs/native-modules-ios.html#exporting-swift

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多