reactjs - 将嵌套对象数组添加到 Firestore
问题描述
我有一个名为 Pages 的数组。我的应用程序允许用户将页面对象添加到页面数组。然后将数据发送到 Firestore。我尝试使用 For 循环遍历数组中的每个对象并将其发送到 Firestore,但它似乎不起作用。我究竟做错了什么?
(我使用 Mobx 而不是 state 来存储信息,这就是为什么我没有在任何地方提到 this.state)
let id = Math.floor(Math.random() * 10000);
let docTitle = this.projectTitle.title;
for(let i = 0; i > this.pages.length; i++){
let pageT = this.pages[i].pageTitle;
let pageD = this.pages[i].pageDesc;
db.collection(docTitle + id).doc(pageT).set({
page: {pageTitle:pageT, pageDesc: pageD, blocks:['item', 'item'], id:'' }
})
.then(function() {
console.log("Document successfully written!");
})
.catch(function(error) {
console.error("Error writing document: ", error);
});
}
解决方案
使用(数组长度)更多的写操作forEach
为每个数组值创建请求是低效的。n
(更不用说await
在每次写入时使用的时间)。
我正在使用 NodeJS/Javascript,所以这也应该在 React 中工作,但可能需要稍作修改,关键是...
(getSearchSubstrings
返回一个数组):
db.collection(x).doc(y).update({
accountSearch: admin.firestore.FieldValue.arrayUnion(...getSearchSubstrings(username))
})
根据他们在数组文档中的更新元素,有两种方法:
// To add or remove multiple items, pass multiple arguments to arrayUnion/arrayRemove
const multipleUnionRes = await washingtonRef.update({
regions: admin.firestore.FieldValue.arrayUnion('south_carolina', 'texas')
// Alternatively, you can use spread operator in ES6 syntax
// const newRegions = ['south_carolina', 'texas']
// regions: admin.firestore.FieldValue.arrayUnion(...newRegions)
});
推荐阅读
- php - 如何修复第 72 行 wp-includes/functions.php 中遇到的非数字值
- javascript - 如何在反应中修复/查找“错误请求”和“拒绝”身份验证错误
- perl - Perl Config::Simple:在文件中添加额外的控制字符 (\\n)
- excel - 对具有多列的范围进行排序,其中一列包含 1900 年之前的日期
- c# - 在 C# Linq 查询中丢弃
- php - 输入类型=文件不能接受大尺寸图片
- javascript - 我想更改条形图单个条的颜色
- neo4j - 在 neo4j-admin 导入后创建唯一约束时遇到无限重启
- python - 测试发布请求时的Django消息中间件问题
- php - Wordpress Ajax 调用成功(200)但没有响应消息