๐Ÿ’™ React

[๋ฆฌ์•กํŠธ] ๋งˆํฌ๋‹ค์šด ์—๋””ํ„ฐ 'react-md-editor' ์„ค์น˜ ๋ฐ ์ ์šฉ ๋ฐฉ๋ฒ• (feat. front)

ANG DEV 2021. 9. 29. 17:29

Summary

1. React ๋งˆํฌ๋‹ค์šด ์—๋””ํ„ฐ ์„ค์น˜

yarn add @uiw/react-md-editor

 

2. Editor ์ž‘์„ฑ ์ปดํฌ๋„ŒํŠธ

import MDEditor from "@uiw/react-md-editor";

const Editor = (props) => {
  return (
    <MDEditor
      height={350}
      autoFocus={false}
      value={props.content}
      onChange={props.contentChange}
    />
  )
}

export default Editor;

 

์—๋””ํ„ฐ ์ž‘์„ฑ ํ™”๋ฉด

 

3. ๋งˆํฌ๋‹ค์šด ๋ทฐ ์ปดํฌ๋„ŒํŠธ

import MDEditor from "@uiw/react-md-editor";

const NoticeView = (props) => {  
  return (
    <MDEditor.Markdown
      height={500}
      value={props.content}
      source={props.data.content}
    />
  )
}

export default NoticeView;

Result

- ์—๋””ํ„ฐ ์ž‘์„ฑ ํ™”๋ฉด

์—๋””ํ„ฐ ์ž‘์„ฑ ํ™”๋ฉด

- ๋งˆํฌ๋‹ค์šด ์ ์šฉ๋œ ๋ทฐ ํ™”๋ฉด


   ๐Ÿ“ ๊ธฐ์šธ๊ธฐ, ๊ตต๊ธฐ, ์ด๋ฏธ์ง€ ๋“ฑ ์ ์šฉ ์‚ฌํ•ญ ์ •์ƒ ๋™์ž‘ ํ™•์ธ โœ”๏ธ

์—๋””ํ„ฐ ์ž‘์„ฑ ํ†ตํ•ด ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ์˜ ๋งˆํฌ๋‹ค์šด ํ™”๋ฉด

 

๐Ÿ“ ๊ธฐ์šธ๊ธฐ, ๊ตต๊ธฐ, ์ด๋ฏธ์ง€ ๋“ฑ ์ ์šฉ ์‚ฌํ•ญ ๋™์ž‘ ํ™•์ธ

 

 

CODE ์„ค๋ช…

'react-md-editor' ์€ ๋ฆฌ์•กํŠธ์˜ Markdown ์—๋””ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ๋งˆํฌ๋‹ค์šด ์–ธ์–ด๋กœ ์—๋””ํ„ฐ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์‹ค์‹œ๊ฐ„ ํ”„๋ฆฌ๋ทฐ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ค€๋‹ค.

 

๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ํฐ ์–ด๋ ค์›€ ์—†์ด ์—๋””ํ„ฐ ์„ค์น˜์™€ ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์•„๋ž˜ ์‚ฌ์ดํŠธ๋กœ ์ ‘์†ํ•˜๋ฉด ๋œ๋‹ค.

https://uiwjs.github.io/react-md-editor/

 

Markdown Editor for React.

 

uiwjs.github.io

 

1. ๋ฆฌ์•กํŠธ ๋งˆํฌ๋‹ค์šด ์—๋””ํ„ฐ ์„ค์น˜ (Feat.์—๋Ÿฌ)

yarn add @uiw/react-md-editor

 

( ์—๋Ÿฌ๊ฐ€ ์—†๋‹ค๋ฉด  2๋ฒˆ ํ•ญ๋ชฉ๊นŒ์ง€ ์ญ‰ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด ๋œ๋‹ค. )

ํ˜น์‹œ ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค๋ฉด ํ˜„์žฌ node ๋ฒ„์ „(15.11.0)์„ ๋ฌธ์ œ ์‚ผ์•„ ๋‹ค๋ฅธ ๊ฑธ ์›ํ•˜๊ณ  ์žˆ์–ด๋‹ˆ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ๋˜๋Š” 16.0.0 ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ•ด์ฃผ๋„๋กํ•œ๋‹ค. ๐Ÿ˜ฑ ๋…ธ๋“œ ๋ฒ„์ „ ๋ณ€๊ฒฝ์—๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค. ๋ชจ๋“ˆ n์„ ํ†ตํ•ด ํ˜„์žฌ node ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋˜๊ฐ€, ๊ทธ ๋‹จ๊ณ„์—์„œ๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด node ํ”„๋กœ๊ทธ๋žจ์„ ์ „์ฒด ์‚ญ์ œ ํ›„ ์žฌ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

[ Node ๋ฒ„์ „ ๋ณ€๊ฒฝ ]

1. node js ํ˜„์žฌ ๋ฒ„์ „ ํ™•์ธ

node -v

 

2. npm ์ด์šฉ ์บ์‹œ๋ฅผ ์ œ๊ฑฐ

npm cache clean -f

 

3. Node ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋ชจ๋“ˆ n ์„ ์„ค์น˜

npm install -g n

 

4. ๋ชจ๋“ˆ n์„ ํ†ตํ•ด node ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ

n latest      /* ์ตœ์‹  ๋ฒ„์ „ */
n stable     /* ์•ˆ์ • ๋ฒ„์ „ */
n 16.0.0     /* ํŠน์ • ๋ฒ„์ „ */
n lts      /* ์˜ค๋žœ ๊ธฐ๊ฐ„ ์•ˆ์ • ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” ๋ฒ„์ „ */

์ด ์ค‘ ๋งˆ์Œ์— ๋“œ๋Š” ๊ฑธ๋กœ ์„ค์น˜ํ•˜๋ฉด ๋œ๋‹ค.

 

์บ์‹œ ์‚ญ์ œ์—์„œ ๋ถˆํ™•์‹คํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์œ„ ๋‹จ๊ณ„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ ์•ˆ๋  ๊ฒฝ์šฐ (ํ˜น์€ ๊ท€์ฐฎ๋‹ค๋ฉด) ์ œ์–ดํŒ์—์„œ node.js๋ฅผ ์‚ญ์ œํ•ด์ฃผ๋ฉด ๋ฐ”๋กœ ๋๋‚œ๋‹ค ! (That's what I want) ์ดํ›„ ์žฌ์„ค์น˜ ๊ณผ์ •์„ ์ง„ํ–‰์ฃผ๋ฉด ๋œ๋‹ค.

 

 

[ NODE ์žฌ์„ค์น˜ ]

 

๋…ธ๋“œ ์‚ญ์ œ ํ›„ ์›ํ•˜๋Š” ํŠน์ • ๋ฒ„์ „์œผ๋กœ ์žฌ์„ค์น˜๋ฅผ ์›ํ•œ๋‹ค๋ฉด ์•„๋ž˜ ์ฃผ์†Œ๋กœ ์ ‘์†ํ•ด์ฃผ์ž.

https://nodejs.org/ko/download/releases/

 

์ด์ „ ๋ฆด๋ฆฌ์Šค | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

์„ค์น˜ ์›ํ•˜๋Š” ๋ฒ„์ „์„ ์„ ํƒํ–ˆ๋‹ค๋ฉด ์ž์‹ ์˜ ์ปดํ“จํ„ฐ ์‚ฌ์–‘์— ๋งž๋Š” msi ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

window์—์„œ ๊ฐœ์ธ ์ปดํ“จํ„ฐ ์‚ฌ์–‘์€ ์‹œ์Šคํ…œ > ์ •๋ณด์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

msi ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋ฌ๋‹ค๋ฉด ์‹คํ–‰์‹œ์ผœ ๋ชจ๋‘ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ Next๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค.

 

์„ค์น˜ ์™„๋ฃŒ๋œ Node๋Š” cmd ์ฐฝ์„ ํ†ตํ•ด ๋ฒ„์ „ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

๋‚ด๊ฐ€ ์›ํ•˜๋Š” node ๋ฒ„์ „์œผ๋กœ ์ •ํ™•ํžˆ ์„ค์น˜๋œ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‚˜์˜ ๊ฒฝ์šฐ 14.13.1๋กœ ์„ค์น˜ํ•œ ํ›„ ๋‹ค์‹œ 16.0.0 ์œผ๋กœ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์—๋””ํ„ฐ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋‹ค.

 

NodeJS๋ฅผ ๊น”๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ npm์ด ์ž๋™์ ์œผ๋กœ ์„ค์น˜๋˜๋Š”๋ฐ ์žŠ์ง€ ๋ง๊ณ  yarn๋„ ์„ค์น˜ํ•ด ์ฃผ์ž.

 

npm install -g yarn

 

yarn์€ Facebook์—์„œ ๋งŒ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ npm ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉฐ npm๊ณผ ๋™์ผํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. yarn์€ ํ™œ์šฉํ•˜๋ฉด ๋” ๋น ๋ฅด๊ณ , ๋ณด์•ˆ์ ์œผ๋กœ๋„ ๋›ฐ์–ด๋‚œ js ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์„œ๋ก ์ด ๊ธธ์—ˆ๊ณ  ๋ณธ๊ฒฉ์ ์œผ๋กœ ์—๋””ํ„ฐ๋ฅผ ์„ค์น˜ํ•ด๋ณด์ž.

 

node๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋ฉด ์•„๋ฌด ๋ฌธ์ œ ์—†์ด ๋งˆํฌ๋‹ค์šด ์—๋””ํ„ฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋œ๋‹ค.

 

์žฌ์„ค์น˜ํ•œ ๋…ธ๋“œ์™€ ํ”„๋กœ์ ํŠธ ๊ฐ„ ๋ฒ„์ „ ํ˜ธํ™˜ ๋งž์ถฐ์ฃผ๊ธฐ

ํ˜น์‹œ ์ž์‹ ์ด ์ œ์ž‘์ค‘์ธ ํ”„๋กœ์ ํŠธ์™€ ์žฌ์„ค์น˜ํ•œ node๊ฐ€ ๋ฒ„์ „ ๋ฌธ์ œ๋กœ ๊ฐˆ๋“ฑ์„ ๊ฒช๊ณ  ์žˆ๋‹ค๋ฉด package.json์—์„œ node ์‹คํ–‰ ๋ฒ„์ „์„ ^16์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋ณ€๊ฒฝ๋œ node ๋ฒ„์ „์œผ๋กœ ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค.

 

์ด์ œ ์—๋””ํ„ฐ ์„ค์น˜๋ฅผ ์™„๋ฃŒํ–ˆ๋‹ค.

 

๋ฌผ๋ก  ๋Œ€๋ถ€๋ถ„ ์•„๋ฌด๋Ÿฐ ์—๋Ÿฌ์—†์ด 

yarn add @uiw/react-md-editor ํ•œ ์ค„๋กœ ๋ชจ๋“ ๊ฒŒ ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค.

 

 

2. ์—๋””ํ„ฐ ์ž‘์„ฑํ•˜๊ธฐ ( ์—ฌ๊ธฐ์—์š” ์—ฌ๊ธฐ! โค)

์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ์„ค์น˜ํ•œ react-md-editor ๋ฅผ import ํ•ด์ฃผ๊ณ  <MDEditor/> ํƒœ๊ทธ ์•ˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ์†์„ฑ์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

- ์—๋””ํ„ฐ ํ™”๋ฉด ์ฝ”๋“œ

import MDEditor from "@uiw/react-md-editor";

const Editor = (props) => {
  return (
    <MDEditor
      height={350}			// ์—๋””ํ„ฐ ๋†’์ด ์ง€์ •
      autoFocus={false}			// ์ปค์„œ ์ž๋™ ์„ค์ • ์ง€์ •
      value={props.content}
      onChange={props.contentChange}	// ์ž‘์„ฑ๋œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
    />
  )
}

export default Editor;

์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ํ•˜๋‹จ์˜ ์—๋””ํ„ฐ ๋ทฐ ํƒœ๊ทธ๋กœ data๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

๋ทฐ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด์•ผํ•  data

 

- ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ ๋งˆํฌ๋‹ค์šด์ด ์ ์šฉ๋œ ๋ทฐ ํ™”๋ฉด

import MDEditor from "@uiw/react-md-editor";

<MDEditor.Markdown
	className={styles.text}
	height={500}
	source={data.cont}
/>

 

Markdown ์—๋””ํ„ฐ๊ฐ€ ์•„๋‹Œ ๊ธฐ๋Šฅ ํƒœ๊ทธ ์•ˆ์— ๋‚ด์šฉ์„ ์ „๋‹ฌํ•ด์ค„๊ฒฝ์šฐ

 

<div className={styles.text} dangerouslySetInnerHTML={{ __html: data.cont }}></div>

 

์•„๋ž˜์™€ ๊ฐ™์ด ๋งˆํฌ๋‹ค์šด ํ˜•์‹์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ์ฑ„ ๋‚ด์šฉ์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

์ด์ƒ ๋งˆํฌ๋‹ค์šด ์—๋””ํ„ฐ๋กœ ์ž‘์„ฑ ํ›„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ํ†ตํ•ด ๊ตฌํ˜„๋œ ์ตœ์ข… ๋ทฐ ํ™”๋ฉด์ด๋‹ค.

๊ตฌํ˜„๋œ ์—๋””ํ„ฐ ๋ทฐ ํ™”๋ฉด ํ™•์ธ

 

Posted by Ang