如何通过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
相关产品推荐
相关产品推荐

