目前正在尝试学习使用 firebase 进行反应,并不断遇到一些小障碍。
截至目前,我正在尝试在新页面中呈现所选项目的数据。索引页包含以下内容:
renderPosts(){
return Object.keys(this.state.posts).map((post, index)=>(
<div key={index} className="thumbnail">
<h2>
<Link to={`/view/posts/${post}`}>
{this.state.posts[post].title}
</Link>
</h2>
<p>{this.state.posts[post].body}</p>
</div>
));
}
render() {
return (
<div>
<div>
{this.renderPosts()}
</div>
<View/>
</div>
)
}
正如您所看到的,它将该帖子的 ID 附加到链接中,因此我现在要做的是返回到 firebase 并在新页面中单独使用该 ID 渲染项目的相应数据。
ViewPost.js 文件如下:
constructor(props){
super(props);
this.state = {
title: '',
body: '',
};
}
componentDidMount(){
database.on('value', snapshot => {
this.setState({
post: snapshot.val()
});
this.props.match.params.postId;
});
}
render() {
return (
<div >
{this.state.props.title}
</div>
)
}
你能告诉我我做错了什么以及该怎么做吗?
您的示例中缺少一个部分,即您的路由器。首先,您需要向路由器添加一条新路由。
<Route path='/view/posts/:postId' component={ViewPost}/>
这是您在创建的渲染方法的链接标记中告诉路由器您想要转到的路线:
<Link to={`/view/posts/${post}`}>
我假设您在访问该链接时想要渲染的组件是您在上面的 ViewPost.js 示例中编写的代码。如果您将此组件导入为ViewPost
在你的路由器文件中它现在应该可以工作了。
单击该链接,它将加载该组件。
接下来,在组件内部,您想要调用与 URL 中看到的键关联的数据。从您使用的 URL 中获取键值this.props.match.params.postId
.
现在您可以访问键值,您可以在 componentDidMount 中执行常规 firebase 调用:
componentDidMount(){
database
.ref(`posts/${this.props.match.params.postId}`)
.on('value', snap => {
this.setState({post: snapshot.val()});
})
}
我希望这是有道理的。首先创建一个路由,然后从 URL 中获取键的值,然后使用该键值在您最终到达的组件内执行数据库请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)