React Native与Expo集成Realm报错:Getting '$$typeof' from binding before it was injected
Expo + Realm 问题解决方案
一、npx expo prebuild仅生成Android文件夹的处理
- 确认iOS开发环境:仅macOS支持iOS预构建,需安装Xcode并配置Command Line Tools(执行
xcode-select --install可快速安装)。 - 显式指定iOS平台构建:运行
npx expo prebuild --platform ios强制生成iOS文件夹。 - 清理缓存后重试:先执行
npx expo start --clear清除Expo缓存,再重新执行预构建命令。
二、Hermes引擎的$$typeof绑定错误修复
该错误源于Realm与Hermes的初始化时机冲突或版本不兼容,可按以下步骤排查:
- 对齐Realm与Expo版本:检查
package.json,确保realm版本与当前Expo SDK匹配(例如Expo SDK 49+对应Realm 12.0及以上版本),版本不匹配会导致底层绑定异常。 - 延迟Realm初始化:避免在组件顶层直接初始化Realm,将初始化逻辑放在
useEffect中,确保JS环境完全就绪后再执行:import React, { useEffect, useState } from 'react'; import Realm from 'realm'; export default function App() { const [realmInstance, setRealmInstance] = useState(null); useEffect(() => { const setupRealm = async () => { const realm = await Realm.open({ schema: [/* 你的数据模型Schema */], }); setRealmInstance(realm); }; setupRealm(); // 组件卸载时关闭Realm实例 return () => realmInstance?.close(); }, []); // 后续基于realmInstance进行数据库操作 return <>{/* 组件内容 */}</>; } - 临时切换JS引擎:若上述方法无效,可在
app.json中切换到JSC引擎绕过问题:{ "expo": { "ios": { "jsEngine": "jsc" }, "android": { "jsEngine": "jsc" } } } - 重置项目依赖:删除
node_modules、package-lock.json(或yarn.lock),重新执行npm install,再重新预构建和启动项目。
内容的提问来源于stack exchange,提问作者Advait Singh
相关产品推荐
相关产品推荐

