현재 블로그를 직접 구현하는 개인 프로젝트를 진행 중이다.
그런데 생각보다 markdown editor 를 이용하는게 단순하지 않아서 내가 구현한 코드를 여기 적어두고자 한다.
마크다운 에디터 라이브러리 후보
디자인, 편리성
다운로두 수 (2022. 3. 기준)
공식문서
문법
나는 @uiw/react-md-editor 로 결정!
yarn add next-remove-imports @uiw/react-md-editor@v3.6.0
import {MDEditorProps} from "@uiw/react-md-editor";
import dynamic from "next/dynamic";
import "@uiw/react-md-editor/markdown-editor.css";
import "@uiw/react-markdown-preview/markdown.css";
const MDEditor = dynamic<MDEditorProps>(() => import("@uiw/react-md-editor"), {
ssr: false,
});
export type EditorProps = MDEditorProps
export const Editor = ({
...rest
}:MDEditorProps)=> {
return (
<MDEditor
{...rest}
/>
)
}
import type {NextPage} from "next"
import {useCallback, useState} from "react"
import {Editor} from "components/organisms/Editor";
type DraftPageProps = {
}
const DraftPage: NextPage<DraftPageProps> = ({
}) => {
const [value, setValue] = useState("**Hello world!!!**")
const handleChange = useCallback((value)=>{
setValue(value)
},[])
return (
<div>
<Editor
value={value}
onChange={handleChange}
/>
</div>
)
}
export default DraftPage
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
}
// ref: https://uiwjs.github.io/react-md-editor/#support-nextjs
const removeImports = require("next-remove-imports")();
module.exports = removeImports(nextConfig)