You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过react-redux-firebase从Firestore获取子集合?遇获取失败问题

解决React-Redux-Firebase获取Firestore子集合数据的问题

你遇到的核心问题是:通过react-redux-firebase获取Firestore子集合时,数据没有按预期出现在state.firestore.ordered.projects中。这是因为react-redux-firebase默认会用子集合的完整路径作为存储的key,而非直接使用子集合名称。下面给你两种可行的解决方案:

方案一:用storeAs指定自定义存储key(推荐)

你可以在firestoreConnect的配置中添加storeAs字段,将子集合数据映射到你想要的projectskey下,这样就能直接通过state.firestore.ordered.projects获取数据。修改代码如下:

export default compose(
  connect(mapStateToProps),
  firestoreConnect(props => {
    return [
      {
        collection: "users",
        doc: props.auth.uid,
        subcollection: "projects", // 简化写法,直接指定子集合名称即可
        storeAs: "projects" // 指定数据存储的key为projects
      }
    ];
  })
)(ProjectDashboard);

修改后,你原本的mapStateToProps代码无需调整,state.firestore.ordered.projects就能正确拿到子集合的数据。

方案二:通过完整路径获取默认存储的数据

如果你不想使用storeAs,可以直接通过子集合的完整路径来获取数据。调整你的mapStateToProps:

const mapStateToProps = state => {
  const userId = state.firebase.auth.uid;
  // 用完整的子集合路径作为key获取数据,兼容未登录状态
  const projects = userId ? state.firestore.ordered[`users/${userId}/projects`] : [];
  return {
    projects,
    auth: state.firebase.auth
  };
};

额外检查项

  • 确认Firestore权限规则允许当前用户访问users/{uid}/projects集合,否则会出现数据无法获取的情况。
  • 检查Firestore中users/{你的UID}/projects路径下确实存在文档数据,避免因空集合导致获取不到数组。

内容的提问来源于stack exchange,提问作者Kenyon Tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:31:27