web-dev-qa-db-ja.com

React Realm with Realmプロジェクトファイルの整理方法は?

Reactネイティブアプリにデータを保存するレルムを選択しました。プロジェクト内のファイルを整理する方法がわかりません。ドキュメントには、1つのコンポーネント用の単純なコードしかありません。しかし、さまざまなコンポーネント、データベースのさまざまな部分。

私は1つのリポジトリで、すべてのスキームが「configureRealm.js」ファイルの配列に渡されているところを見ました。

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

また、たとえば「schemes」ディレクトリにさまざまなスキームを配置して、必要な場所にインポートできることもわかりました。

たとえば、「Cats.js」では、私ができるコンポーネントを反応させます:

import Cats from 'schemes/Cats';

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

そして、「Dogs.js」で犬をインポートし、このスキームでレルムを初期化します。

しかし、私は最初に、そして私の方法ではわかりません。レルムリアクションネイティブアプリケーションを整理する最適な方法は何ですか?

20
inferus-vv

私は最近、レルムを扱うとき、私よりもはるかに賢い誰かからいくつかの指示を得た後、このように私のApp/Data構造を整理し始めました:)すでにそれを処理しています。これは、組織化/コンパートメント化された開発のための本当に確かな構造です。それが役に立てば幸い!

_.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_では、標準のRealm関連のメソッドをすべて保持しています。 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_は、Realmデータを取得するために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();
_

--App.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;
_
28
fostertime

Realm githubリポジトリの例では、すべてのモデルが定義され、単一のファイルからエクスポートされます。 https://github.com/realm/realm-js/blob/master/examples/ReactExample/components/realm.js

次に、これはアプリ全体で必要であり、必要に応じて使用されます。

1
Ari