我 Select 了在React原生应用程序中存储数据的领域.我不明白如何在我的项目中组织文件.文档只提供一个组件的简单代码.但我需要不同的组件和数据库的不同部分.

我在一个存储库中看到,所有方案都被传递到"configureRealm.js"文件中的数组:

new Realm({schema: [Dogs, Cats]});

此外,我还发现,我可以把不同的方案放在"方案"目录中,例如,并在需要的地方导入它们.

例如,在"Cats.js"组件中,我可以做:

import Cats from 'schemes/Cats';

this.realm = new Realm({schema: [Cats]});

在"Dogs.js"中,使用这个方案导入狗并初始化领域.

但我首先不确定,我也不确定.组织本机应用程序的正确方法和最佳方法是什么?

推荐答案

我最近开始这样组织我的应用程序/数据 struct ,在处理领域时,从一个比我聪明得多的人那里得到了一些指导:)我没有详细介绍领域最初是如何创建的,因为我认为你已经在处理这个问题了.这是一个真正坚实的组织/分区开发 struct .希望有帮助!

.App
    ├──Assets
    ├──Data
    |   ├──Db
    |   |   ├──Db.js
    |   |   ├──DbHelper.js
    |   ├──Models
    |   |   ├──ModelA.js
    |   |   ├──ModelB.js
    |   |   ├──ModelC.js
    |   ├──Queries.js
    ├──Scenes
    |   ├──App.js
    |   |   ├──(all other scene/view components)

--Models目录包含我的所有模式,如下所示:

import Realm from 'realm';
export default class ModelA extends Realm.Object {}
ModelA.schema = {
    name: 'ModelA',
    primaryKey: 'id',
    properties: {
        one: {type: 'int', optional: true},
        two: 'string',
        three: {type: 'string', optional: true},
    }
}

--在Db.js中,我保留了所有与领域相关的标准方法.createRealm()write()close()insert()和一个通用查询方法,如下所示:

query(model: string, filter?: string) {
    let results = this.realm.objects(model);
    if(filter) {
        return results.filtered(filter);
    }
    return results;
}

--DbHelper.js然后导入Db.js和我所有的模型.它使用Db.js中的标准方法处理我的db实例的设置和获取,如下所示:

import Db from 'App/Data/Db/Db';
import ModelA from 'App/Data/Models/ModelA';
import ModelB from 'App/Data/Models/ModelB';
import ModelC from 'App/Data/Models/ModelC';

class DbHelper {

    modelSchema = [
        ModelA,
        ModelB,
        ModelC
    ];

    activeInstancePath = (myLocalRealmPath)

    getInstance(): Db {
        let instance: Db = this.activeInstancePath;
        if(!instance) {
            throw new Error('DbHelper.js :: Active Instance Not Set!');
        }
        return instance;
    }

    /* note: this is where you would also setInstance and define a constant, or other method for the instance path */
}

--Queries.js然后输入DbHelper.js.Queries.js包含特定应用程序相关数据查询的所有方法.Queries.js是我需要导入到我的Scene个组件中,以获取领域数据的全部内容.我的Queries.js看起来像这样:

import DbHelper from 'App/Data/Db/DbHelper';

class Queries {

    /* a typical query */
    getSomeDataFromModelA(filterValue: string = null) {
        let filter = null;
        if (filterValue) {
            filter = `two = ${filterValue}`;
        }
        let results = DbHelper.getInstance()
            .query('ModelA', filter);

        return results;
    }

    /* return some JSON data that we originally stored in the Realm as a string */
    getSomeJsonData() {
        let results = DbHelper.getInstance()
            .query('ModelB');

        if(results.length) {
            let parsed = JSON.parse(results[0].objectA);
            return parsed.objectB;
        }
        return null;
    }
}
export default new Queries();

--应用程序.js.所以现在,在我的应用程序场景中,我会简单地做这样的事情:

import React, { Component } from 'react';
import { View, Text } from 'react-native';
import Queries from 'App/Data/Queries';

class App extends Component {

    constructor(props) {
        super(props);

        // Get Some Realm Data!
        let modelAData = Queries.getSomeDataFromModelA()
        let someJsonData = Queries.getSomeJsonData();

        // Set Initial state
        this.state = {
            modelData: modelAData,
            jsonData: someJsonData
        }
    }

    componentDidMount() {
        console.log(this.state.modelData);
    }

    render() {
        return(
            <View>
                <Text>{this.state.jsonData.objectKey}</Text>
            </View>
        );
    }
}

export default App;

React-native相关问答推荐

错误:HostBody::get for prop NativeUnimoduleProxy中出现异常- Android虚拟设备(AVD)使用Expo测试React Native App时崩溃

React Native:在ScrollView中更改焦点时键盘关闭

更改所选标签栏元素的底部边框 colored颜色

在 React Native 上为 android 创建自定义 UI 组件,如何向 JS 发送数据?

TextInput 防止 ScrollView 滚动

使用 AsyncStorage 如何以及在何处保存整个 redux 存储

在 react-native 中调试原生 java 代码

ReactNative FlatList 一次渲染所有元素?

可以在没有 await 关键字的情况下调用异步函数吗?

从组件的 style属性中获取 CSS 属性值

将 svg 转换为 react-native-svg

使用 React Native 打开 iOS iPad 模拟器

react-native 自动完成文本输入

如何使用 Expo 在真实的 iOS 设备上运行应用程序?

TypeError : props.navigation.getParam 不是函数. In(props.navigation.getParam('name')

React Native 得到这个错误'Unrecognized operator abs'

使用 React Navigation 导航堆栈时重新渲染组件

在 `../node_modules/react-native/React` 中找不到 `React-Core` 的 podspec

INSTALL_FAILED_UPDATE_INCOMPATIBLE:包签名与之前安装的版本不匹配,忽略

React Native 必须双击才能使 onPress 工作