我正在寻找链接到博客文章。
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()
到达路由器的方法,但是在您最初使用链接组件导航到它们之前,这些页面不存在的问题。
我想知道是否有关于如何绕过这个而不对路径进行硬编码的任何想法,这样我就不需要单独的组件。