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/reactRealmProviderをインポートします。オブジェクトモデルを
schemaproper に渡します。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のプロパティを設定することもできます。
realmRefuseRefと併用され、構成された 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 を公開するラッパー。 | |||
RealmProvider によって開かれた Realm のインスタンスを返します。 | | ||
指定されたタイプとプライマリキーの値からオブジェクト( | | ||
指定された型からオブジェクトのコレクション( | |