【发布时间】:2021-04-19 19:14:39
【问题描述】:
我正在寻找链接到博客文章。
import React from "react";
import styled from "@emotion/styled";
import { css } from "@emotion/react";
import { Link, Button } from "gatsby";
import Image from "gatsby-image";
import { navigate } from "@reach/router";
const BlogArticle = styled.article`
border-bottom: 1px solid #ddd;
display: flex;
margin-top: 0;
padding-bottom: 1rem;
:first-of-type {
margin-top: 1rem;
}
`;
const ImageLink = styled("div")`
margin: 1rem 1rem 0 0;
width: 100px;
`;
const ReadNavigate = styled(Link)`
display: inline-block;
font-size: 0.8rem;
font-family: "Oswald";
`;
const TutorialPreview = ({ post }) => {
console.log(post.slug);
return (
<BlogArticle>
<ImageLink onClick={() => navigate(post.slug)}>
<Image
fluid={post.image.sharp.fluid}
css={css`
* {
margin-top: 0;
}
`}
alt={post.title}
/>
</ImageLink>
<div
css={css`
padding-top: 1rem;
`}
>
<h3 onClick={() => navigate(post.slug)}>{post.title}</h3>
<p>{post.excerpt}</p>
<ReadNavigate to="/tire-machine-basics">
→ Read this post
</ReadNavigate>
</div>
</BlogArticle>
);
};
export default TutorialPreview;
以上是我在主页上预览的模板,它适用于我的预览,如果页面通过链接组件的行为列出所有帖子,则假定 slug 应附加到当前页面堆栈。
例如
在主页链接 = /{post.slug}
在博客列表链接 = tutorials/{post.slug}
问题在于,帖子页面是使用未嵌套在教程中的页面级别的 slug 生成的。我尝试使用到达路由器的navigate() 方法来规避,但是在您最初使用链接组件导航到它们之前,这些页面不存在的问题。
我想知道是否有任何想法来规避这个问题而无需对路径进行硬编码,这样我就不需要单独的组件了。
【问题讨论】:
标签: reactjs gatsby blogs reach-router mdxjs