内联图像
在正文字段中使用 Next.js Image 组件处理内联图像和媒体实体。
为了处理通过所见即所得编辑器添加的内联图像和媒体实体,我们可以使用 html 解析器将 img
标签替换为 Next.js Image
组件。
依赖项
yarn add html-react-parser
组件
让我们创建一个组件来渲染 text_long
(例如:node.body.processed
)字段类型。
components/body.tsx
import { HTMLReactParserOptions } from "html-react-parser"import { Element } from "domhandler/lib/node"import parse from "html-react-parser"import Image from "next/image"
const options: HTMLReactParserOptions = { replace: (domNode) => { // Look for an img tag and replace it with Image. 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" /> ) } },}
export function Body({ value }: { value: string }) { return <>{parse(value, options)}</>}
我们使用 intrinsic
布局,以便图像在较小的视口中缩小,但在较大的视口中保持原始尺寸。
用法
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/image 的信息。