Haloo, hope you have a great day!
I'm in the middle of learning something about markdown on react, i already success using react markdown editor, but now, when i want to display it, i got stuck, i'm using react-markdown and NEXTJS, and here's the problem:
importing the library:
const ReactMarkdown = dynamic(
() => import("react-markdown").then((mod) => mod.default),
{ ssr: false }
);
const rehypeRaw = dynamic(
() => import("rehype-raw").then((mod) => mod.default),
{ ssr: false }
);
const remarkGfm = dynamic(
() => import("remark-gfm").then((mod) => mod.default),
{ ssr: false }
);
i have markdown look like this:
const [value, setValue] = useState("# A demo of `react-markdown`");
and this is my div
<div className="container mx-auto px-0 lg:px-40 pt-6 pb-8 sm:pt-14 sm:pb-16 md:pt-14 md:pb-16 min-h-screen">
<ReactMarkdown
children={value}
remarkPlugins={[remarkGfm]}
/>
</div>
and when i refresh my page, i got this:

that's not H1, and the code tag seems didn't work, BUT when i'm using bold:
const [value, setValue] = useState("# A **demo** of `react-markdown`");
the bold is being display..

and at this point, idk why this happend, can somebody help me?
It looks like you're using TailwindCSS, the default styles for elements are reset, that's why the h1 text will look like any other text.
You can use @tailwindcss/typography to counter this.
Just add the plugin to your tailwindcss.config.js file
// tailwindcss.config.js
module.exports = {
plugins: [require('@tailwindcss/typography'), (...)],
...
}
And use the prose classes on the HTML elements
<div className="prose ...">(...)</div>
Also, using Next.js dynamic imports, you don't have to use the then syntax to get the default module.
const ReactMarkdown = dynamic(() => import("react-markdown"), { ssr: false });
This snippet should give you the same as importing the default module. Only use the then when you want to import a particular export
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With