链接

在正文字段中使用 Next.js Link 组件进行内联链接。


要将内联 <a /> 标签替换为 Next.js Link 组件,我们可以使用 HTML 解析器,就像我们对图像所做的那样。


依赖项

安装 html-react-parser

yarn add html-react-parser

组件

更新来自图像的组件以处理内联链接。

components/body.tsx

import { HTMLReactParserOptions, domToReact } from "html-react-parser"
import { Element } from "domhandler/lib/node"
import parse from "html-react-parser"
import Image from "next/image"
import Link from "next/link"
const options: HTMLReactParserOptions = {
replace: (domNode) => {
if (domNode instanceof Element && domNode.name === "img") {
const { src, alt, width, height } = domNode.attribs
return (
<Image
src={`${process.env.NEXT_PUBLIC_DRUPAL_BASE_URL}/${src}`}
width={`${width}px`}
height={`${height}px`}
alt={alt}
layout="intrinsic"
objectFit="cover"
/>
)
}
if (domNode.name === "a") {
const { href, class: className } = domNode.attribs
return (
<Link href={href} passHref>
<a className={className}>{domToReact(domNode.children)}</a>
</Link>
)
}
},
}
export function Body({ value }: { value: string }) {
return <>{parse(value, options)}</>
}

用法

pages/index.tsx

import { Body } from "components/body"
export default function Page({ node }) {
return (
<div variant="container">
<h1>{node.title}</h1>
<Body value={node.body.processed} />
</div>
)
}

了解更多关于 next/link 的信息。