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

React Native写入Firebase报未处理拒绝错误,如何获取新保存文档ID

问题修复方案

核心错误原因

  • 第一个致命错误是拼写错误:代码中quotes.lenght拼写错误,正确属性名是quotes.length。拼写错误会导致读取到undefined,减1后得到NaN,用NaN作为数组下标访问元素会直接抛出异常,这就是应用崩溃的直接原因。
    因为Firebase的add操作在报错代码前已经执行完成,所以你可以在Firebase控制台看到正常存储的数据,报错发生在存储成功后的ID赋值步骤。
  • 第二个潜在错误:docRef没有使用const/let声明,会隐式成为全局变量,在严格模式下会直接抛出引用错误,也容易引发全局变量污染问题。
  • 第三个优化点:如果quotes是React组件的state,直接修改数组元素属性属于直接变更state,除了无法触发视图重渲染外,在React严格模式下也会产生不可预期的问题。

修复后代码

_saveQuoteToDB = async (text, author, quotes) => {
    // 新增const声明docRef变量
    const docRef = await Firebase.db.collection('quotes').add({ text, author });
    // 修正length拼写错误
    quotes[quotes.length - 1].id = docRef.id;

    // 如果quotes是React state,替换上面的赋值逻辑,返回新数组用于更新state:
    // const newQuotes = [...quotes];
    // newQuotes[newQuotes.length - 1].id = docRef.id;
    // return newQuotes;
}

内容的提问来源于stack exchange,提问作者Juergen Schulze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:54:05