firebaseConnect HOC为“集合”返回未定义。但是,如果删除“ where”参数,它将返回数据。
function mapStateToProps(state) {
return {
contestants: state.firestore.ordered['ContestantsList-contestants'],
votes: state.firestore.ordered['ContestantsList-votes'],
currentUserId: state.firebase.auth.uid,
}
}
export default compose(
firestoreConnect(ownProps => {
// added this console log to verify that ownProps.contestId exists.
console.log('ownProps', {...ownProps})
return ([
{
collection: 'votes',
where: [
['authorId', '==', ownProps.currentUserId],
['contestId', '==', ownProps.contestId],
],
storeAs: 'ContestantsList-votes'
},
{
collection: 'contestants',
orderBy: ['createdAt', 'asc'],
where: ['contestId', '==', ownProps.contestId], // <---- If I remove this line, it works
storeAs: 'ContestantsList-contestants',
},
])
}),
connect(mapStateToProps),
)(ContestantsList);
在上面的代码中,votes
属性是一个数据数组,与预期的一样。 contestants
道具以未定义形式返回。我完全不知道为什么会这样。我希望这对经验丰富的Firestore用户真的很明显。我是Firebase和Firestore的新手。
答案 0 :(得分:0)
我确实解决了问题。这是比赛条件。我创建了一个包含此查询的HOC,并用HOC包装了几个组件。目的是使组件尽可能模块化,并避免将数据通过组件传递到其他组件。
我的方法意味着查询在呈现组件时运行了几次。它快速连续几次更新了redux状态。比赛条件随之而来。
我必须重新组织项目,以使查询仅进行一次,然后更新我的HOC,以直接从redux读取结果。所以,这最终是我的问题。