javascript - Vuex/Firestore 从另一个集合中检索用户数据
问题描述
我正在构建一个系统,用户可以在其中学习课程。用户可以关注课程,然后将 courseID 和 userID 添加到成员表中。我无法简单地列出关注该俱乐部的用户信息(名字、姓氏等)
我设法获取数据并在控制台记录它,但是当我提交到我的状态时,状态只显示一个对象而不是我可以循环的数组。
我有以下收藏:
Users: -> auto-id -> { firstName, LastName etc. }
Courses: -> auto-id -> { courseName, courseLocation etc. }
Members: -> auto-id -> { courseID, userID etc. }
这是我在商店中的操作:
state: {
members: []
},
mutations: {
SET_MEMBER_DETAIL(state, val) {
state.members = val
},
},
actions: {
retreiveMembers ({commit}, payload) {
db.collection('members')
.where('courseID', '==', payload.courseID)
.get()
.then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
const documents = doc.data()
db.collection('users')
.doc(documents.userID)
.get()
.then((res) => {
console.log(res.data())
commit('SET_MEMBER_DETAIL', res.data())
})
})
})
},
}
这是我控制台中的结果:
{admin: false, firstName: "Sam", lastName: "Staron"}
{admin: false, firstName: "Paul", lastName: "Staron"}
{admin: "Admin", firstName: "John", lastName: "Doe"}
当我通过 vue chrome add on 查看状态时,我只收到最后一个数组而不是所有 3 个数组和一个对象。
members: Object
admin: "Admin"
firstName: "John"
lastName: "Doe"
我想将控制台记录的结果作为一个数组提交到我的状态中,然后我可以在前端循环。
除非有更实用的方法来使用 Firestore 检索关系数据。
提前感谢任何人,山姆
解决方案
在您当前的代码中,每次调用 时commit('SET_MEMBER_DETAIL', res.data())
,您都会替换SET_MEMBER_DETAIL
. 您将希望实现SET_MEMBER_DETAIL
为一个数组,然后将每个新成员推送到它。例如,请参阅push
此处答案中的调用:Push to vuex store array not working in VueJS。
如果retreiveMembers
可能被多次调用,那么每当您重新运行查询时,您都需要将一个空数组提交到列表中。在您当前的代码中就像commit('SET_MEMBER_DETAIL', [])
以前一样。querySnapshot.forEach
推荐阅读
- asp.net-core - 在 AuthorizationHandler 中访问 ModelState
- arcgis - 在 arcGIS SceneView 中限制地图区域/缩放
- python - 任意 X 和 Y 的最快整数搜索
- django - 小部件形式的多对多字段
- arrays - 在具有关联输入数组时检查验证错误并在 Blade 模板中提取错误
- visual-studio - SSRS 报告数据在报告服务器与本地预览上看起来不同
- python - Python(VS Code)中的模块'cassandra.cluster'中没有名称'Cluster'
- javascript - Javascript scrollIntoView(); 不加载
- tmux - TMUX 添加了一个我无法关闭的窗口
- javascript - 如何在网页中显示设备连接或断开连接