Realm の構成 - React Native SDK
項目一覧
Realm の React Native SDK と @realm/react
パッケージには、Realm の多くの構成オプションが用意されています。
Realm をどのように構成するかによって、Realm の機能とデータの処理方法が決まります。 このページには、Realm をさまざまな方法で構成する方法に関する情報が記載されています。
前提条件
React Native アプリケーションでRealmを構成する前に、
Realm React Native SDKのインストール
@ 邦土/reactパッケージ をインストールします
同期のない Realm の構成
RealmProviderは、Realm を子コンポーネントに公開するラッパーです。 プロパティをRealmProvider
に渡して Realm を構成します。
RealmProvider
がレンダリングされると、Realm が開きます。 つまり、レンダリングが失敗すると、子コンポーネントは Realm にアクセスできなくなります。
同期されていない Realm を設定するには、次の手順に従います。
@realm/react
RealmProvider
をインポートします。オブジェクトモデルを
schema
proper に渡します。Realm を構成するためのプロパティとして、その他の構成 オブジェクトプロパティを
RealmProvider
に追加します。
import React from 'react'; import {RealmProvider} from '@realm/react'; function AppWrapperLocal() { return ( <RealmProvider schema={[YourObjectModel]}> <RestOfApp /> </RealmProvider> ); }
同期されていない Realm で使用されるプロバイダーとフックのリストについては、 @realm/ Reactプロバイダーとフック を確認してください。
設定オプション
構成オブジェクトのプロパティに一致するプロパティを設定することで、 RealmProvider
を構成できます。 fallback
とrealmRef
のプロパティを設定することもできます。
realmRef
useRef
と併用され、構成された Realm をRealmProvider
の外部プロセスに公開します。 これは、クライアント リセットのフォールバックなどに役立ちます。
fallback
- Realm が開くのを待っている間にレンダリングされました。 ローカル Realm は通常、
fallback
プロンプトが必要ないほど十分な速度で開きます。
インメモリ Realm の構成
ファイルに書き込まれずにメモリ内で完全に実行される Realm を作成するには、 RealmProvider
のinMemory
プロンプにtrue
を渡します。
import React from 'react'; import {Realm, RealmProvider} from '@realm/react'; function AppWrapperLocal() { return ( <RealmProvider inMemory={true}> <RestOfApp /> </RealmProvider> ); }
メモリが不足している場合、インメモリ Realm はディスク領域を使用することがありますが、Realm を閉じると、インメモリ Realm によって作成されたファイルが削除されます。
Realm の暗号化
ディスク上の Realm ファイルを暗号化するには、「 Realm の暗号化 」を参照してください。
同期された Realm の構成
Device Sync を使用して Atlas とデータを同期する Realm を開くには、「 同期された Realm の開き方 」を参照してください。
複数の Realm の公開
パッケージは、@realm/react
React Context オブジェクト を使用してアプリケーション内の Realm を公開します および プロバイダー コンポーネント。React フックを使用して Realm にアクセスできます。
複数の Realm を公開するには、次の点を考慮してください。
各邦土は、 createRealmContext() で作成された、独自の Context オブジェクトを必要とします。
各コンテキスト内のプロバイダーとフックは、操作するリージョンを簡単に把握できるように名前空間する必要があります。
@realm/react
からRealmProvider
を直接インポートする場合、別の Context オブジェクトが作成されます。 そのオブジェクトのプロバイダーとフックは、createRealmContext
を使用して作成された Context オブジェクトとの同期を解除できません。
個別のコンテキスト オブジェクトの作成
createRealmContext() を使用して追加の Context オブジェクトを作成することで、一度に複数の Realm を開くことができます。
import React from 'react'; import { Realm, AppProvider, UserProvider, createRealmContext, } from '@realm/react'; class SharedDocument extends Realm.Object { static schema = { name: 'SharedDocument', properties: { _id: 'objectId', owner_id: 'objectId', title: 'string', createdDate: 'date', }, primaryKey: '_id', }; } class LocalDocument extends Realm.Object { static schema = { name: 'LocalDocument', properties: { _id: 'objectId', name: 'string', createdDate: 'date', }, }; } // Create Shared Document context object. const SharedRealmContext = createRealmContext({ schema: [SharedDocument], }); // Create Local Document context object. const LocalRealmContext = createRealmContext({ schema: [LocalDocument], });
import React from 'react'; import { Realm, AppProvider, UserProvider, createRealmContext, } from '@realm/react'; class SharedDocument extends Realm.Object<SharedDocument> { _id!: Realm.BSON.ObjectId; owner_id!: Realm.BSON.ObjectId; title!: string; createdDate?: Date; static schema: ObjectSchema = { name: 'SharedDocument', properties: { _id: 'objectId', owner_id: 'objectId', title: 'string', createdDate: 'date', }, primaryKey: '_id', }; } class LocalDocument extends Realm.Object<LocalDocument> { _id!: Realm.BSON.ObjectId; name!: string; createdDate?: Date; static schema: ObjectSchema = { name: 'LocalDocument', properties: { _id: 'objectId', name: 'string', createdDate: 'date', }, }; } // Create Shared Document context object. const SharedRealmContext = createRealmContext({ schema: [SharedDocument], }); // Create Local Document context object. const LocalRealmContext = createRealmContext({ schema: [LocalDocument], });
プロバイダーとフックの抽出
各 Context オブジェクトからプロバイダーとフックを抽出する必要があります。 分割を使用してプロバイダーとフックに名前空間を付ける必要があります。 そうすると、操作対象の邦土について考えやすくなります。
Device Sync を使用していないRealmProvider
で利用できるフックを確認するには、「非同期 RealmProvider フック」を参照してください。
// Namespace the Shared Document context's providers and hooks. const { RealmProvider: SharedDocumentRealmProvider, useRealm: useSharedDocumentRealm, } = SharedRealmContext; // Namespace the Local Document context's providers and hooks. const { RealmProvider: LocalDocumentRealmProvider, useRealm: useLocalDocumentRealm, } = LocalRealmContext;
名前空間プロバイダーとフックの使用
Context オブジェクトのプロバイダーとフックを抽出したら、アプリのコンポーネントで使用できます。 抽出されたプロバイダー内の子コンポーネントは、抽出されたフックにアクセスできます。
function TwoRealmsWrapper() { return ( <View> <AppProvider id={APP_ID}> <UserProvider fallback={LogIn}> {/* This is a Flexible Sync realm. */} <SharedDocumentRealmProvider sync={{flexible: true}}> <AppSectionOne /> </SharedDocumentRealmProvider> </UserProvider> </AppProvider> {/* This is a separate local-only realm. */} <LocalDocumentRealmProvider> <AppSectionTwo /> </LocalDocumentRealmProvider> </View> ); } function AppSectionOne() { const realm = useSharedDocumentRealm(); // Work with shared documents... } function AppSectionTwo() { const realm = useLocalDocumentRealm(); // Work with local documents... }
スキーマを提供せずに Realm にアクセス
デバイス上でRealmが作成されたら、Realm にアクセスするために常にスキーマを渡す必要はありません。 代わりに、オブジェクトモデルをschema
プロパティに渡すことなくRealmProvider
を使用できます。 Realm のスキーマは、 Realm.defaultPath
にある既存の Realm ファイルから派生します。
スキーマを提供せずに Realm にアクセスする方法は、ローカル Realm でのみ機能します。 同期された Realm を使用する場合は、常にスキーマを渡す必要があります。
import React from 'react'; import {RealmProvider} from '@realm/react'; function AppWrapper() { return ( // To access a realm at the default path, do not pass any configuration. // Requires a realm that has already been created. <RealmProvider> <RestOfApp /> </RealmProvider> ); }
@realm/ Reactプロバイダーとフック
@realm/react
には、同期されていない Realm とそのデータの操作を簡素化する プロバイダーとフック があります。
プロバイダー/フック | 説明 | 例 | |
---|---|---|---|
データの読み取り、書込み、更新を可能にするフックにアクセスできる子コンポーネントに Realm を公開するラッパー。 | 「同期のない Realm の構成」を参照してください。 | ||
RealmProvider によって開かれた Realm のインスタンスを返します。 |
| ||
指定されたタイプとプライマリキーの値からオブジェクト( Realm.Object<T> )を返します。 返されたオブジェクトに対する変更を更新します。 オブジェクトが存在しないか削除された場合はnull を返します。 |
| ||
指定された型からオブジェクトのコレクション( Realm.Results<T & Realm.Object T> )を返します。 コレクション内のオブジェクトに対するすべての変更をアップデートします。 コレクションが空の場合は、空の配列を返します。 |
|