Expo React Native集成expo-sqlite遇Native Module缺失及路由导出问题
Expo项目集成expo-sqlite遇到的两个错误及解决方法
问题描述
在Expo项目中使用expo-sqlite集成SQLite时,运行项目遇到两个错误:
(NOBRIDGE) ERROR Error: Cannot find native module 'ExpoSQLite'(NOBRIDGE) WARN Route "./note/index.tsx" is missing the required default export
已执行操作:
- 通过
npx expo install expo-sqlite安装依赖 - 遵循expo-sqlite官方文档的基础使用规范
- 尝试重装node_modules、清除项目缓存
环境信息:Expo SDK 52.0.23、Tinybase 5.4.5
相关代码片段:
export default function NoteApp(){ const store = useCreateStore(createStore); useAndStartPersister(store); return( // TSX内容 ) } const useAndStartPersister = (store : any) => // Persist store to Expo SQLite or local storage; load once, then auto-save. useCreatePersister( store, (store) => Platform.OS === 'web' ? createLocalPersister(store, 'todos') : createExpoSqlitePersister(store, SQLite.openDatabaseSync('todos.db')), [], // @ts-ignore (persister) => persister.load().then(persister.startAutoSave) );
期望目标:项目正常运行,按expo-sqlite文档实现SQLite数据库交互。
错误1:Cannot find native module 'ExpoSQLite' 解决方法
- 使用正确的启动命令:Expo SDK 52需通过
npx expo start --dev-client启动项目,不能用传统的expo start。新SDK的原生模块依赖自定义开发客户端,Expo Go可能无法兼容部分模块,建议创建专属开发客户端。 - 匹配依赖版本:运行
npx expo install expo-sqlite@latest,确保expo-sqlite版本与SDK 52完全兼容。 - 彻底清除缓存:执行
npx expo start --clear,清除Expo的所有缓存文件,避免旧缓存导致模块加载异常。 - 检查模块导入:确认代码中正确导入SQLite模块,比如
import * as SQLite from 'expo-sqlite';,排查拼写错误。
错误2:Route "./note/index.tsx" is missing the required default export 解决方法
- 补全默认导出:打开
./note/index.tsx文件,确保存在一个默认导出的组件或函数,示例:export default function NoteIndex() { return <div>笔记页面</div>; } - 核对路由规范:如果使用Expo Router,确保路由文件符合要求——index.tsx必须作为路由入口,且必须包含默认导出。
代码优化建议
补充必要导入并优化类型定义,避免潜在问题:
import { Platform } from 'react-native'; import * as SQLite from 'expo-sqlite'; import { useCreateStore, createStore } from 'tinybase'; import { useCreatePersister } from 'tinybase/ui-react'; import { createLocalPersister } from 'tinybase/persisters/persister-local'; import { createExpoSqlitePersister } from 'tinybase/persisters/persister-expo-sqlite'; export default function NoteApp(){ const store = useCreateStore(createStore); useAndStartPersister(store); return( // 你的TSX内容 ) } const useAndStartPersister = (store: ReturnType<typeof createStore>) => { useCreatePersister( store, () => Platform.OS === 'web' ? createLocalPersister(store, 'todos') : createExpoSqlitePersister(store, SQLite.openDatabaseSync('todos.db')), [], async (persister) => { await persister.load(); persister.startAutoSave(); } ); };
内容的提问来源于stack exchange,提问作者Junior Seppo
相关产品推荐
相关产品推荐

