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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:25:03