当包含where查询参数时,firestoreConnect或Firestore返回“未定义”

时间:2019-02-11 22:43:03

标签: javascript google-cloud-firestore

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的新手。

1 个答案:

答案 0 :(得分:0)

我确实解决了问题。这是比赛条件。我创建了一个包含此查询的HOC,并用HOC包装了几个组件。目的是使组件尽可能模块化,并避免将数据通过组件传递到其他组件。

我的方法意味着查询在呈现组件时运行了几次。它快速连续几次更新了redux状态。比赛条件随之而来。

我必须重新组织项目,以使查询仅进行一次,然后更新我的HOC,以直接从redux读取结果。所以,这最终是我的问题。