我正在使用react-redux-firebase和firestoreConnect从我的数据库中获取信息,并将其映射到其预制减速器中的props中。要将其信息连接到我的组件,我可以通过以下方式使用“ compose”方法:
export default compose(
connect(mapStateToProps, mapDispatchToProps),
firestoreConnect([
{
collection: 'questions',
doc: this.props.match.params.id,
subcollection: 'messages',
}
])
)(QuestionDetail);
如您所见,我正在尝试访问具有ID的特定文档,该ID作为其父级的属性传递给组件。但是,“ this”在“ compose”的上下文中未定义,因此我无法使用它来访问道具和我的参数。
我还有其他方法可以访问传递给组件的ID以便向Firestore请求吗?
答案 0 :(得分:1)
它应该可以在react-router
的旧版本中使用。
但是我假设您使用的是最新版本的React Router(v4 +)。因此,您必须使用“ withRouter”高阶组件包装整个组件。每当渲染时,它将更新的匹配,位置和历史道具传递给包装的组件。
首先,您必须导入withRouter。
import { withRouter } from "react-router";
然后,您必须将其与Router一起包装。
export default withRouter(compose(
connect(mapStateToProps, mapDispatchToProps),
firestoreConnect((props) =>
[{
collection: 'questions',
doc: props.match.params.id,
subcollections: [{ collection: 'messages' }],
}]
))(QuestionDetail));
这对我有用。
答案 1 :(得分:0)
在深入搜索文档之后,我发现您可以将prop传递给firestoreConnect函数(还请注意,我以错误的方式查询了子集合)。该代码最终是:
export default compose(
connect(mapStateToProps, mapDispatchToProps),
firestoreConnect((props) => [
{
collection: 'questions',
doc: props.match.params.id,
subcollections: [{ collection: 'messages' }],
}
])
)(QuestionDetail);