Realm 구성 - React Native SDK
이 페이지의 내용
Realm React Native SDK와 @realm/react
패키지는 영역에 대한 다양한 구성 옵션을 제공합니다.
영역을 구성하는 방법에 따라 영역의 기능과 데이터 작업 방법이 결정됩니다. 이 페이지에는 다양한 방법으로 영역을 구성하는 방법에 대한 정보가 포함되어 있습니다.
전제 조건
React Native 애플리케이션에서 영역을 구성하기 전에:
동기화 없이 Realm 구성
RealmProvider 는 Realm을 하위 구성 요소에 노출하는 래퍼입니다. RealmProvider
에 소품을 전달하여 Realm을 구성합니다.
RealmProvider
이(가) 렌더링되면 Realm이 열립니다. 즉, 렌더링에 실패하면 하위 구성 요소가 Realm에 액세스할 수 없습니다.
동기화되지 않은 영역을 구성하려면 다음과 같이 하세요:
@realm/react
에서RealmProvider
을(를) 가져옵니다.객체 모델을
schema
프롭에 전달합니다.다른 구성 객체 속성을
RealmProvider
에 프롭으로 추가하여 Realm을 구성합니다.
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
과 함께 사용하여 구성된 영역을RealmProvider
외부의 프로세스에 노출합니다. 이는 클라이언트 재설정 폴백(fallback) 같은 경우에 유용할 수 있습니다.
fallback
- 영역이 열리기를 기다리는 동안 렌더링됩니다. 로컬 영역은 일반적으로
fallback
속성이 필요하지 않을 정도로 빠르게 열립니다.
인메모리 Realm 구성
파일에 기록되지 않고 메모리에서 완전히 실행되는 영역을 만들려면 RealmProvider
의 inMemory
속성에 true
전달하세요.
import React from 'react'; import {Realm, RealmProvider} from '@realm/react'; function AppWrapperLocal() { return ( <RealmProvider inMemory={true}> <RestOfApp /> </RealmProvider> ); }
인메모리 영역은 메모리가 부족한 경우 디스크 공간을 사용할 수 있지만 영역을 닫으면 인메모리 영역에서 생성된 파일이 삭제됩니다.
Realm 암호화
디스크의 영역 파일을 암호화하려면 영역 암호화를 참조하세요.
동기화된 Realm 구성
Device Sync를 사용하여 Atlas와 데이터를 동기화하는 영역을 열려면 동기화된 영역 열기를 참조하세요.
두 개 이상의 Realm 노출
@realm/react
패키지는 React Context 객체와 제공자 구성 요소를 사용하여 애플리케이션의 영역을 노출합니다. React 후크를 사용하여 영역에 액세스할 수 있습니다.
두 개 이상의 영역을 노출하려면 다음을 고려하세요:
각 컨텍스트 내의 제공자와 훅은 작업 중인 영역을 쉽게 이해할 수 있도록 네임스페이스(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 객체에서 제공자와 훅을 추출해야 합니다. 디스트럭처링을 사용하여 제공자와 훅의 네임스페이스를 지정해야 합니다. 이렇게 하면 작업 중인 영역에 대해 더 쉽게 추론할 수 있습니다.
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에 액세스하기
기기에 영역이 생성된 후에는 영역에 액세스하기 위해 항상 스키마를 전달할 필요는 없습니다. 대신 schema
속성에 객체 모델을 전달하지 않고 RealmProvider
를 사용할 수 있습니다. 영역의 스키마는 Realm.defaultPath
에 있는 기존 영역 파일에서 파생됩니다.
스키마를 제공하지 않고 영역에 액세스하는 것은 로컬 영역에서만 작동합니다. 동기화된 영역을 사용할 때는 항상 스키마를 전달해야 합니다.
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
에는 비동기 영역 및 해당 데이터 작업을 간소화하는 제공자와 훅이 있습니다.
제공자/훅 | 설명 | 예시 | |
---|---|---|---|
영역을 하위 구성 요소에 노출하는 래퍼(wrapper)로, 데이터를 읽고, 쓰고, 업데이트할 수 있는 후크에 접근할 수 있습니다. | 동기화 없이 Realm 구성을참조하세요. | ||
RealmProvider가 연 Realm의 인스턴스를 반환합니다. |
| ||
프라이머리 키의 지정된 유형 및 값에서 객체( Realm.Object<T> )를 반환합니다. 반환된 객체에 대한 변경 사항을 업데이트합니다. 객체가 존재하지 않거나 삭제된 경우 null 을 반환합니다. |
| ||
주어진 유형의 객체 collection( Realm.Results<T & Realm.Object T> )을 반환합니다. collection의 모든 객체에 대한 변경 사항을 업데이트합니다. collection이 비어 있으면 빈 배열을 반환합니다. |
|