React Native中Appwrite实时事件订阅URLSearchParams未实现错误的解决
解决React Native + Hermes下Appwrite实时订阅的URLSearchParams错误
问题原因
Hermes引擎默认未完整实现URLSearchParams.set方法,而Appwrite的实时订阅SDK依赖该方法,导致抛出未实现错误。
解决步骤
1. 补全URLSearchParams Polyfill
安装兼容Hermes的polyfill来补全缺失的方法:
# npm npm install url-search-params-polyfill # yarn yarn add url-search-params-polyfill
在项目入口文件(比如App.js或index.js)的最顶部引入polyfill:
import 'url-search-params-polyfill';
2. 确保Appwrite SDK为最新版本
旧版SDK可能对Hermes的兼容存在问题,更新到最新版:
# npm npm update appwrite # yarn yarn upgrade appwrite
3. 修正事件监听代码
你提供的代码存在两处问题:
- 删除事件的匹配字符串拼写错误(
database应为databases,且缺少文档通配符*) - 未处理更新事件的逻辑
修正后的完整代码:
appwriteClient.subscribe( `databases.${APPWRITE_DATABASE_ID}.collections.${APPWRITE_OPPORTUNITIES_COLLECTION_ID}.documents`, (response: any) => { // 处理文档创建事件 if (response.events.includes('databases.*.collections.*.documents.*.create')) { setOpportunities(prev => [...prev, response.payload]); } // 处理文档更新事件 else if (response.events.includes('databases.*.collections.*.documents.*.update')) { setOpportunities(prev => prev.map(item => item.$id === response.payload.$id ? response.payload : item )); } // 处理文档删除事件 else if (response.events.includes('databases.*.collections.*.documents.*.delete')) { setOpportunities(prev => prev.filter(item => item.$id !== response.payload.$id)); } } );
内容的提问来源于stack exchange,提问作者Enock Male
相关产品推荐
相关产品推荐

