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」で犬をインポートし、このスキームでレルムを初期化します。
しかし、私は最初に、そして私の方法ではわかりません。レルムリアクションネイティブアプリケーションを整理する最適な方法は何ですか?
私は最近、レルムを扱うとき、私よりもはるかに賢い誰かからいくつかの指示を得た後、このように私の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;
_
Realm githubリポジトリの例では、すべてのモデルが定義され、単一のファイルからエクスポートされます。 https://github.com/realm/realm-js/blob/master/examples/ReactExample/components/realm.js
次に、これはアプリ全体で必要であり、必要に応じて使用されます。