You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React组件外部使用@realm/react创建的Realm实例?

如何在React组件外部访问@realm/react的Realm实例?

官方其实提供了兼容的方案,既不违背设计思路,又能在组件外部直接使用Realm实例,核心是手动创建Realm实例并关联到官方的RealmContext,具体步骤如下:

1. 全局创建并导出Realm实例

提前在单独文件中初始化Realm实例,确保全局唯一:

// realmInstance.js
import Realm from 'realm';
import { YourSchema } from './schemas'; // 替换为你的业务Schema

// 初始化Realm实例,配置与官方自动创建的一致
export const realm = new Realm({
  schema: [YourSchema],
  // 按需添加sync、path等配置项
});

// 如果是同步Realm,可确保实例初始化完成后再使用(可选)
async function ensureRealmReady() {
  if (realm.syncSession) {
    await realm.syncSession.waitForDownload();
  }
}
ensureRealmReady();

2. 将实例传入官方的RealmProvider

在根组件中,把手动创建的实例传给RealmProvider,替代它自动创建实例的逻辑:

// App.jsx
import { RealmProvider } from '@realm/react';
import { realm } from './realmInstance';
import RootComponent from './RootComponent';

export default function App() {
  return (
    <RealmProvider realm={realm}>
      <RootComponent />
    </RealmProvider>
  );
}

3. 组件内、外部分别使用实例

  • 组件内部:依然可以正常使用官方提供的useRealm钩子,获取到的就是你手动创建的实例:
// SomeComponent.jsx
import { useRealm } from '@realm/react';

export default function SomeComponent() {
  const realm = useRealm();
  // 正常执行CRUD操作
  const dataList = realm.objects('YourSchema');
  return <Text>数据条数:{dataList.length}</Text>;
}
  • 组件外部:直接导入全局的Realm实例即可,无需层层传递:
// dataUtils.js
import { realm } from './realmInstance';

export function batchDeleteExpiredData() {
  realm.write(() => {
    realm.delete(realm.objects('YourSchema').filtered('expired = true'));
  });
}

注意事项

  • 确保Realm实例的初始化逻辑只执行一次,避免重复创建导致的资源冲突
  • 如果是带同步功能的Realm,建议在实例初始化完成(比如同步会话准备就绪)后再进行外部逻辑调用,避免操作未就绪的实例
  • 这种用法完全符合官方设计,RealmProvider本身就支持传入已有的实例,只是文档未重点强调

内容的提问来源于stack exchange,提问作者Fuzzyma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 17:07:21