【发布时间】:2020-04-09 01:29:01
【问题描述】:
我在使用 Next.js 创建博客时遇到了问题,希望有人能指出我正确的方向,因为我对 Next.js 还比较陌生。
我正在尝试从 Google Firestore 上的数据库中提取文档,每个文档都是不同的博客文章。我试图避免为每篇博文创建单独的页面,并创建了一个动态页面 [url].js,每篇博文都使用它来呈现。
无论如何,当我访问博客文章,刷新该博客文章,然后尝试点击返回按钮时,我的问题就出现了。 URL 会改变,但屏幕上呈现的组件不会改变。因此,它不会返回包含所有博客列表的页面,而是保留在当前博客文章上,但 url 会更改为所有博客的列表。
例如:
如果我在 localhost:3000/blog/test-page 上然后刷新页面并回击,url 更改为 localhost:3000/blog 但 test-page仍在显示其内容。
有人能帮我找出解决此问题的最佳方法吗?谢谢
[url].js
const Post = props => (
<Layout
template={"blog"}
>
<div className="container">
<div className="default-content page-styles">
<h2 className="title title-small"><span>{props.blogPost.title}</span></h2>
{props.blogPost.body.map(block => Components(block))}
</div>
</div>
</Layout>
);
Blog.js
const Blog = (props) => (
<Layout>
<HeroBanner
title={title}
desktopImage={desktopImage}
mobileImage={mobileImage}
mobileImageSmall={mobileImageSmall}
padding="120px 0px 150px 0px"/>
<section className="default spaced-page">
<div className="container">
<div className="default-content" >
<div className="the-post-section">
{props.blogPost.map(post => (
<div key = {post.id} className="the-post page-styles">
<img src={post.image} style={{ height: 180 + "px", width: 310 + "px"}}/>
<Link href="/blog/[url]" as={`/blog/${post.url}`}>
<h4><a>{post.title}</a></h4>
</Link>
<div className="clear"></div>
</div>
))}
</div>
</div>
</div>
</section>
</Layout>
);
【问题讨论】:
-
当您点击返回按钮时,控制台是否有任何错误?看起来它在导航上崩溃了。
-
@EvgenyTimoshenko 不幸的是,当我点击后退按钮时没有抛出任何东西。是什么让您认为它崩溃了?
-
好吧,有时您可能会看到类似的情况发生,当它出错时,您会看到之前的状态。我注意到您将 Blog.js 大写,它在文件系统中是如何命名的?您的页面目录如何?
-
如何获取页面的道具?你有
getInitalProps给他们吗? -
@EvgenyTimoshenko 它在文件系统中没有大写。我有调用 google firestore 并收集博客文章的 getInitalProps。
标签: javascript reactjs react-router next.js