0

我在 Firestore 中的数据布局:

用户文档包含一组对聊天文档的 id 引用。

前任:

collections
    /users
        'CQATa3f3d2XmBskmmt8hmCJhzcJ2'
             name: '...'
             email: '...'
             chats: ["RuUKEwsGtR9QylicdgJW", "JlzcIfkZ1KzeXClhJvOE"]
    /chats
        ...    

对于当前用户,我想获取与其聊天数组中的每个元素关联的聊天对象。该数据应该转到 firestore.ordered,以便我可以将其提供给 FlatList,但 firestore.ordered.chats 始终未定义,即使 firestore.data.chats 具有正确的数据。

我不确定这是否与我调用 connect 和 firestoreConnect 的顺序或我如何使用填充或其他原因有关。

... Component ...


const populates = [
  { child: 'chats', root: 'chats' }
]

const mapStateToProps = (state, props) => { 
  return {
    auth: state.firebase.auth,
    user: populate(state.firestore, 'users', populates),
    chats: state.firestore.ordered.chats,
  }
}

// ---- TEST ----
export default compose(
  connect(mapStateToProps, mapDispatchToProps),
  firestoreConnect((props) => {
    return [ { collection: 'users', doc: props.auth.uid, populates } ]
  }),
)(Main)

在 mapStateToProps 中记录状态的结果:

在此处输入图像描述

4

1 回答 1

0

我最终只是从 populate 调用的结果中得到了一系列聊天。

const populates = [
{ child: 'chats', root: 'chats', keyProp: 'subjectName', queryParams: ['orderByKey'] } 
]


const mapStateToProps = (state, props) => { 
  const populatedUser = populate(state.firestore, 'users', populates)
  let chats = null
  if(populatedUser){
    chats = Object.values(populatedUser[state.firebase.auth.uid].chats)
  }
  return {
    auth: state.firebase.auth,
    user: populatedUser,
    chats: chats
  }
}

// ---- TEST ----
export default compose(
  connect(mapStateToProps, mapDispatchToProps),
  firestoreConnect((props) => {
    return [ { collection: 'users', doc: props.auth.uid, populates } ]
  }),
)(Main)
于 2020-02-25T20:13:02.287 回答