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. @realm/react 패키지 설치

RealmProvider 는 Realm을 하위 구성 요소에 노출하는 래퍼입니다. RealmProvider 에 소품을 전달하여 Realm을 구성합니다.

RealmProvider 이(가) 렌더링되면 Realm이 열립니다. 즉, 렌더링에 실패하면 하위 구성 요소가 Realm에 액세스할 수 없습니다.

동기화되지 않은 Realm을 구성하려면 다음과 같이 하세요:

  1. @realm/react에서 RealmProvider을(를) 가져옵니다.

  2. 객체 모델을 schema 프롭에 전달합니다.

  3. 다른 구성 객체 속성을 RealmProvider 에 프롭으로 추가하여 Realm을 구성합니다.

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) 같은 경우에 유용할 수 있습니다.
  • 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 객체와 제공자 구성 요소를 사용하여 애플리케이션의 영역을 노출합니다. React 후크를 사용하여 영역에 액세스할 수 있습니다.

두 개 이상의 Realm을 노출하려면 다음을 고려하세요:

  • 각 Realm에는 createRealmContext()로 생성된 자체 Context 객체가 필요합니다.

  • 각 컨텍스트 내의 제공자와 훅은 작업 중인 Realm을 쉽게 이해할 수 있도록 네임스페이스(namespace)를 지정해야 합니다.

  • @realm/react에서 RealmProvider을 직접 가져오는 경우 이는 별도의 컨텍스트 객체입니다. 해당 객체의 제공자 및 훅은 createRealmContext를 사용하여 만든 컨텍스트 객체와 동기화 해제할 수 없습니다.

createRealmContext()를 사용하여 추가 컨텍스트 객체를 생성하여 한 번에 두 개 이상의 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 객체에서 제공자와 훅을 추출해야 합니다. 디스트럭처링을 사용하여 제공자와 훅의 네임스페이스를 지정해야 합니다. 이렇게 하면 작업 중인 Realm에 대해 더 쉽게 추론할 수 있습니다.

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을 하위 구성 요소에 노출하는 래퍼(wrapper)로, 데이터를 읽고, 쓰고, 업데이트할 수 있는 후크에 접근할 수 있습니다.
RealmProvider가 연 Realm의 인스턴스를 반환합니다.
const realm = useRealm();
프라이머리 키의 지정된 유형 및 값에서 객체(Realm.Object<T>)를 반환합니다. 반환된 객체에 대한 변경 사항을 업데이트합니다. 객체가 존재하지 않거나 삭제된 경우 null을 반환합니다.
const myTask = useObject(Task, _id);
주어진 유형의 객체 collection(Realm.Results<T & Realm.Object T>)을 반환합니다. collection의 모든 객체에 대한 변경 사항을 업데이트합니다. collection이 비어 있으면 빈 배열을 반환합니다.
const tasks = useQuery(Task);

돌아가기

Realm 파일