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

React Native使用Firestore存储用户注册数据时调用set方法报错TypeError: this._firestore.native.documentSet is not a function

React Native使用Firestore存储用户注册数据时调用set方法报错TypeError: this._firestore.native.documentSet is not a function

这个错误通常是由于React Native Firebase Firestore的原生模块未正确配置、链接,或者版本兼容性问题导致的。以下是针对该问题的分步解决方案:

1. 确认Firebase原生模块已正确安装与链接

React Native 0.60+支持自动链接,但偶尔会出现链接不完整的情况,可尝试以下操作:

iOS平台

  • 进入iOS目录更新并安装Pod依赖:
cd ios
pod install --repo-update
cd ..
  • 打开Xcode执行Product -> Clean Build Folder清理缓存,再重新构建项目。

Android平台

  • 清理Gradle缓存并重新构建项目:
cd android
./gradlew clean
cd ..
npx react-native run-android
  • 检查android/app/build.gradle中Firestore依赖是否正确引入,确保版本与package.json一致:
implementation platform('com.google.firebase:firebase-bom:33.5.1') // 需匹配你的Firebase BOM版本
implementation 'com.google.firebase:firebase-firestore'

2. 验证Firebase初始化是否正确

确保在项目入口(如App.js或index.js)只初始化一次Firebase:

import { initializeApp } from '@react-native-firebase/app';
import { firestore } from '@react-native-firebase/firestore';

// 替换为你的Firebase项目配置
const firebaseConfig = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_AUTH_DOMAIN",
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_STORAGE_BUCKET",
  messagingSenderId: "YOUR_SENDER_ID",
  appId: "YOUR_APP_ID"
};

initializeApp(firebaseConfig);

3. 检查版本兼容性

虽然你的RN版本与Firebase版本理论上兼容,但可进一步确认:

  • 确保@react-native-firebase/app与@react-native-firebase/firestore的版本完全一致(当前配置已满足);
  • 参考React Native Firebase官方兼容矩阵,确认版本匹配关系,必要时升级到最新兼容版本。

4. 优化代码中的异步调用逻辑

将代码中的then/catch改为async/await风格,让异步流程更清晰,同时避免潜在的调用问题:

const handleRegister = async () => {
  if (validateInput()) {
    try {
      const userCredential = await registerUserWithEmail(email, password);
      console.log('User registered:', userCredential.user);

      const db = firestore();
      const userRef = db.collection('users').doc(userCredential.user.uid);
      console.log('Firestore Reference:', userRef);

      // 改用async/await写入Firestore
      await userRef.set({
        firstName: firstName,
        lastName: lastName,
        email: email,
        createdAt: firestore.FieldValue.serverTimestamp()
      });

      console.log('User data set in Firestore');
      Alert.alert('Success', 'Account Created Successfully');
      navigation.navigate('Login');
    } catch (error) {
      console.error('Error during registration/Firestore write:', error);
      Alert.alert('Registration Failed', error.message);
    }
  }
};

5. 确认Firestore安全规则配置

调试阶段可临时设置宽松规则验证写入权限(上线后需改为身份验证规则):

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

上线后建议改为用户专属权限:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

6. 彻底重置依赖与缓存

若以上步骤无效,可尝试完全重置项目依赖:

# 删除依赖文件与锁文件
rm -rf node_modules package-lock.json yarn.lock
# 重新安装依赖
npm install
# 清理React Native缓存
npx react-native start --reset-cache

完成后重新执行iOS Pod安装与Android Gradle清理,再运行项目。


备注:内容来源于stack exchange,提问作者user29129991

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:18:03