【发布时间】:2020-03-09 17:54:51
【问题描述】:
我的数据存储在 Mongo Atlas 中。我可以获取数据(帖子),但是当我点击帖子时,它不会为我提供该 ID 的数据。我创建了一个页面/帖子页面。由于下面的代码位于 postlist.tsx 中,我只能查看帖子的 ID,并且只能通过其 url 将 ID 传递到下一页。我还希望能够查看与该特定 ID 关联的帖子的标题和正文:
这是我的 blogs.tsx
interface PostState{
posts: Post[];
}
export default class PostList extends React.Component <{},PostState> {
state = {
posts: []
};
componentDidMount = () => {
this.getBlogPost();
};
getBlogPost = () => {
axios
.get('/api')
.then(({data}) => {
const reverseData = new Array;
for (let datetime = data.length - 1; datetime >= 0; datetime--) {
reverseData.push(data[datetime]);
}
this.setState({posts: reverseData})
})
.catch((error) => {
alert('Error: there was an error processing your request')
})
}
displayBlogPost = (posts : Post[]) => {
const currentDateTime = new Date();
if (!posts.length)
return null;
return posts.map((post, index) => (
<div key={index}>
<Card>
<Title>
<Link href={`/post?id=${post._id}`} as= .
{`/post/${post._id}`}></Title>
{/* <p>{post.date}</p>
<p>{post.name}</p> */}
<FullName>{`${post.name} |
${dateToString(currentDateTime)}`}</FullName>
<Line />
<Question >{post.body}</Question>
</Card>
</div>
));
}
render() {
return (
<div>
<Container>
<Headers/>
<div className="blog">
{this.displayBlogPost(this.state.posts)}
</div>
</Container>
</div>
);
}
}
【问题讨论】:
-
如果您的大部分组件在 xhr 之后呈现在客户端上,那么使用 nextjs 毫无意义。也许 nextjs 的 getInitialProps 可以帮助你。
-
为了实现这一点,我可以对代码进行哪些更改? @HMR
-
我检查了 getInitialProp 但它只接受 https 获取。我可以对代码进行哪些更改以根据他们的 ID 获取帖子正文、标题? @HMR
-
您可以从在任何地方实际渲染 PostsLists 组件开始。
-
我没听懂你。 @HMR。我能够呈现我的帖子列表(博客).. 我希望当有人点击我博客的标题时,它会转到一个新页面并根据其 ID 显示标题和正文
标签: reactjs mongodb typescript next.js