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
相关产品推荐
相关产品推荐

