为什么返回按钮不触发 Next.js 应用程序中的客户端导航?
Why go back button doesn't trigger client side navigation in Next.js app?
我有一个简单的 Next.js 应用程序,它使用 GraphQL 从服务器加载文章。除非您在阅读某篇文章并想返回时重新加载页面,否则动态路由工作得很好。
典型情况完全没问题
Index -> [slug] -> go back (Index)
但是问题出在这种情况下
[slug] -> go back(Index)
页面不会触发重新呈现,当 url 指向索引时,页面上的内容保持不变。
我检查了我的 Link 组件是否正确编写,它们是。
这是索引页面上的一个组件,其中包含 link 重定向
const Index: FunctionComponent<IArticlePreviewProps> = (props) => {
const { article }: { article: IArticlePreviewData } = props;
return (
<Link href="/articles/[slug]" as={`/articles/${article.slug}`}>
<a>
<img src={article.thumbnail} alt=""/>
</a>
</Link>
)
}
这是一个动态显示文章内容的组件
const Article: NextPage = (props) => {
const router = useRouter();
const { loading, data, error } = useQuery<IArticleQueryData>(ARTICLE_QUERY, {
variables: { id: router.query.slug }
});
if (loading) {
return null;
}
const article = data!.Article;
return (
<>
<div className="d-flex justify-content center">
<div className="container">
<div className="article">
<div className="article__header d-flex">
<div className="col-8 p-0 article__header-thumbnail">
<img src={article.thumbnail} alt=""/>
</div>
<div className="col-4 p-4 article__header-title d-flex flex-column justify-content-end">
<h1>{article.title}</h1>
<time className="article-date" dateTime={article.createdAt}>
{getArticlePreviewDate(article.createdAt)}
</time>
</div>
</div>
</div>
</div>
</div>
</>
)
}
这只是 Next.js 中的一个错误。已经修复了。
我有一个简单的 Next.js 应用程序,它使用 GraphQL 从服务器加载文章。除非您在阅读某篇文章并想返回时重新加载页面,否则动态路由工作得很好。
典型情况完全没问题
Index -> [slug] -> go back (Index)
但是问题出在这种情况下
[slug] -> go back(Index)
页面不会触发重新呈现,当 url 指向索引时,页面上的内容保持不变。
我检查了我的 Link 组件是否正确编写,它们是。
这是索引页面上的一个组件,其中包含 link 重定向
const Index: FunctionComponent<IArticlePreviewProps> = (props) => {
const { article }: { article: IArticlePreviewData } = props;
return (
<Link href="/articles/[slug]" as={`/articles/${article.slug}`}>
<a>
<img src={article.thumbnail} alt=""/>
</a>
</Link>
)
}
这是一个动态显示文章内容的组件
const Article: NextPage = (props) => {
const router = useRouter();
const { loading, data, error } = useQuery<IArticleQueryData>(ARTICLE_QUERY, {
variables: { id: router.query.slug }
});
if (loading) {
return null;
}
const article = data!.Article;
return (
<>
<div className="d-flex justify-content center">
<div className="container">
<div className="article">
<div className="article__header d-flex">
<div className="col-8 p-0 article__header-thumbnail">
<img src={article.thumbnail} alt=""/>
</div>
<div className="col-4 p-4 article__header-title d-flex flex-column justify-content-end">
<h1>{article.title}</h1>
<time className="article-date" dateTime={article.createdAt}>
{getArticlePreviewDate(article.createdAt)}
</time>
</div>
</div>
</div>
</div>
</div>
</>
)
}
这只是 Next.js 中的一个错误。已经修复了。