Контекст: у меня есть сайт Next.js с Интерфейс чакры. У меня есть некоторый пользовательский уцененный контент, который извлекается из внешнего источника (скажем, GitHub README.md
для репо) во время выполнения.
Теперь по умолчанию react-markdown (на основе remarkjs) использует HTML-тег <img>
для уцененных изображений (![]()
). Я хочу использовать новый компонент <Image />
, выпущенный в Next.js 10, в указанная пользователем уценка. Кроме того, я также хотел бы заменить другие теги соответствующими компонентами пользовательского интерфейса Chakra.
Как мне это сделать?
РЕШЕНИЕ
// utils/parser.tsx
import Image from 'next/image';
export default function ImageRenderer({ src, alt }) {
return <Image src={src} alt={alt} unsized />;
}
а затем на нужной странице:
//pages/readme.tsx
import ReactMarkdown from 'react-markdown';
import imageRenderer from '../utils/parser';
// `readme` is sanitised markdown that comes from getServerSideProps
export default function Module({ readme }) {
return <ReactMarkdown allowDangerousHtml={true} renderers={{ image: imageRenderer }} children={readme} />
}
то же самое и с другими элементами...