Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm の構成 - React Native SDK

項目一覧

  • 前提条件
  • 同期のない Realm の構成
  • 設定オプション
  • インメモリ Realm の構成
  • Realm の暗号化
  • 同期された Realm の構成
  • 複数の Realm の公開
  • 個別のコンテキスト オブジェクトの作成
  • プロバイダーとフックの抽出
  • 名前空間プロバイダーとフックの使用
  • スキーマを提供せずに Realm にアクセス
  • @realm/ Reactプロバイダーとフック

Realm の React Native SDK と @realm/reactパッケージには、Realm の多くの構成オプションが用意されています。

Realm をどのように構成するかによって、Realm の機能とデータの処理方法が決まります。 このページには、Realm をさまざまな方法で構成する方法に関する情報が記載されています。

React Native アプリケーションでRealmを構成する前に、

  1. Realm React Native SDKのインストール

  2. @ 邦土/reactパッケージ をインストールします

RealmProviderは、Realm を子コンポーネントに公開するラッパーです。 プロパティをRealmProviderに渡して Realm を構成します。

RealmProviderがレンダリングされると、Realm が開きます。 つまり、レンダリングが失敗すると、子コンポーネントは Realm にアクセスできなくなります。

同期されていない Realm を設定するには、次の手順に従います。

  1. @realm/react RealmProviderをインポートします。

  2. オブジェクトモデルをschema proper に渡します。

  3. Realm を構成するためのプロパティとして、その他の構成 オブジェクトプロパティをRealmProviderに追加します。

import React from 'react';
import {RealmProvider} from '@realm/react';
function AppWrapperLocal() {
return (
<RealmProvider schema={[YourObjectModel]}>
<RestOfApp />
</RealmProvider>
);
}

同期されていない Realm で使用されるプロバイダーとフックのリストについては、 @realm/ Reactプロバイダーとフック を確認してください。

構成オブジェクトのプロパティに一致するプロパティを設定することで、 RealmProviderを構成できます。 fallbackrealmRefのプロパティを設定することもできます。

  • realmRef
    useRefと併用され、構成された Realm をRealmProviderの外部プロセスに公開します。 これは、クライアント リセットのフォールバックなどに役立ちます。
  • fallback
    Realm が開くのを待っている間にレンダリングされました。 ローカル Realm は通常、 fallbackプロンプトが必要ないほど十分な速度で開きます。

ファイルに書き込まれずにメモリ内で完全に実行される Realm を作成するには、 RealmProviderinMemoryプロンプにtrueを渡します。

import React from 'react';
import {Realm, RealmProvider} from '@realm/react';
function AppWrapperLocal() {
return (
<RealmProvider inMemory={true}>
<RestOfApp />
</RealmProvider>
);
}

メモリが不足している場合、インメモリ Realm はディスク領域を使用することがありますが、Realm を閉じると、インメモリ Realm によって作成されたファイルが削除されます。

ディスク上の Realm ファイルを暗号化するには、「 Realm の暗号化 」を参照してください。

Device Sync を使用して Atlas とデータを同期する 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 にアクセスするために常にスキーマを渡す必要はありません。 代わりに、オブジェクトモデルを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 とそのデータの操作を簡素化する プロバイダーとフック があります。

プロバイダー/フック
説明
データの読み取り、書込み、更新を可能にするフックにアクセスできる子コンポーネントに Realm を公開するラッパー。
同期のない Realm の構成」を参照してください。
RealmProvider によって開かれた Realm のインスタンスを返します。
const realm = useRealm();
指定されたタイプとプライマリキーの値からオブジェクト( Realm.Object<T> )を返します。 返されたオブジェクトに対する変更を更新します。 オブジェクトが存在しないか削除された場合はnullを返します。
const myTask = useObject(Task, _id);
指定された型からオブジェクトのコレクション( Realm.Results<T & Realm.Object T> )を返します。 コレクション内のオブジェクトに対するすべての変更をアップデートします。 コレクションが空の場合は、空の配列を返します。
const tasks = useQuery(Task);

戻る

Realm ファイル