正在尝试将FireStore数组存储在React Native中



我一直在尝试将FireStore数组推送或存储在我自己的一个数组中。我尝试了几个版本的代码,第一个是:

var data = [];
db.collection('Rooms')
.doc(code)
.get()
.then((docs) => data.push(docs.data()));

但是,当我记录数据变量时,它显示为一个空数组。我尝试过的第二种方法是:

var [data, setData] = useState([]);
db.collection("Rooms")
.doc(code)
.get()
.then((docs) => setData(docs.data()));

然而,这个方法似乎无限地设置数据,所以它无限地读取我的API,这是我想避免的。我最后尝试的方法是:

var data = db.collection("Rooms").doc(code).get();
console.log(data);

但这只是返回

Promise {
"_U": 0,
"_V": 0,
"_W": null,
"_X": null,
}

有人能帮我吗?理想情况下,我想存储一个名为"的数组的数据;MovieArray";在文档中,但我甚至无法访问文档,所以即使您可以帮助我存储整个文档的数据,也会非常有帮助。

如果您正在使用react,我建议您使用钩子。您也不需要将对象推送到这样的数组中。

下面是一个如何获取一些数据并存储数据集合的示例。

const Forum = () => {
const [posts, setPosts] = useState(null);
const collectIdsAndDocs = (doc) => {
return { id: doc.id, ...doc.data() };
};
useEffect(() => {
const getPost = async () => {
const snapshot = await firestore.collection('Posts').get();
const myPosts = snapshot.docs.map(collectIdsAndDocs);
console.log(myPosts);
setPosts({ myPosts });
};
const createPost = async (post) => {
const docRef = await firestore.collection('Posts').add(post);
const doc = await docRef.get();
console.log(doc);
};
createPost({ Title: 'My First Post', Content: 'My content' });
getPost();
}, []);
return (
// return some JSX 
);
};

为什么这样做?

当您获取集合时,Firebase会返回该集合的快照。此快照有一个文档列表或一个数组(如果您愿意的话(。

然后,我们希望映射到这些文档上,构建一个只包含文档数据和单个文档ID的新对象。这就是myPosts变量。

使用react状态挂钩,您可以将该对象设置为Posts的当前状态,在您的情况下,这将是房间。

当您向数据库中添加某些内容时,Firestore将返回对新添加项的引用。如果需要,可以调用get((取回文档。

尝试更改为(请参阅前面的注释(

const [data, setData] = useState({});

最新更新