Reactjs React Native Expo离线应用程序:如何从远程服务器更新本地数据库

Reactjs React Native Expo离线应用程序:如何从远程服务器更新本地数据库,reactjs,react-native,expo,react-native-ios,offline-caching,Reactjs,React Native,Expo,React Native Ios,Offline Caching,我计划建立一个新的离线first React Native Expo应用程序,用户将主要浏览图像和文本内容 它必须是一个完全管理的世博会应用程序,没有弹出。所以 Realm DB不是解决方案,因为它需要弹出Expo应用程序 偶尔,用户可以手动触发重新加载数据库(图像和JSON文件)。这将下载整个数据库(~50-100MB)或差异更新(我还不知道这种实现) database.json的示例 { "dbVersion": "1.0.1", "data": { "ani

我计划建立一个新的离线first React Native Expo应用程序,用户将主要浏览图像和文本内容

它必须是一个完全管理的世博会应用程序,没有弹出。所以 Realm DB不是解决方案,因为它需要弹出Expo应用程序

偶尔,用户可以手动触发重新加载数据库(图像和JSON文件)。这将下载整个数据库(~50-100MB)或差异更新(我还不知道这种实现)

database.json的示例

{
    "dbVersion": "1.0.1",
    "data": {
        "animals": [
            {
                "name": "Dog",
                "age": 5,
                "quantity": 609,
                "images": ["./assets/images/animals/dog/01.jpg", "./assets/images/animals/dog/02.jpg"]
            },
            {
                "name": "Cat",
                "age": 2,
                "quantity": 66,
                "images": ["./assets/images/animals/cat/01.jpg", "./assets/images/animals/cat/02.jpg"]
            }
        ],
        "food": [
            {
                "name": "Banana",
                "color": "Yellow",
                "quantity": 200,
                "images": ["./assets/images/food/banana/01.jpg", "./assets/images/food/banana/02.jpg"]
            }
        ]
    }
}
问题:您将如何为此类应用程序下载数据库(JSON文件和图像文件)?在React Native w/Expo中是否有此类实施的最佳实践

我当前的想法:是否可以将所有数据库文件(JSON和图像)打包成一个托管在远程服务器(如Amazon S3)上的
.zip
文件,应用程序将把这个文件下载到其本地文件存储,删除与现有数据库相关的所有文件,然后将新下载的
.zip
文件解压缩到它的位置

世博会随之而来。也许如果图像也存储在SQLite中,Expo可以(不知何故,不确定如何)从远程服务器下载新的SQLite
db.db
,并覆盖现有的
db.db

或者我们必须运行自己的转换器,从远程服务器获取下载的数据库,并将它们转换为SQL语句,SQLite将执行SQL语句来导入下载的数据


目前正在使用Expo SDK 32,React Native 0.59.8。

如果您想简化方法,请使用异步存储

//save data
const data = JSON.stringify(yourJson);
AsyncStorage.setItem("@database", data);

//load data
AsyncStorage.getItem("@database").then(dataString => {
  const data = JSON.parse(dataString);
})


或者使用local database()

您建议存储二进制文件,尤其是图像(.不幸的是,我将要求应用程序是一个完全管理的Expo应用程序,而不弹出它。@Nyxynyx在使用Expo()时参考此页我建议只将图像存储到设备中(如缓存文件)谢谢。您知道是否可以使用Expo iOS app将SQLite db文件下载到设备上,并用新下载的db文件替换旧的db文件?我正在考虑使用此方法完全更新db。您是如何解决此问题的?我也有同样的想法issue@gjfonte尚未解决。希望世博会能为Realm增加支持。