์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- object
- await
- ๋น๋๊ธฐ
- Porject
- https://youtube.com/playlist?list=PLuHgQVnccGMA5836CvWfieEQy0T0ov6Jh&si=FTaYv8m21EhO-A2K
- sql
- https://m.blog.naver.com/tt2t2am1118/221010125300
- addEventListener
- ajax
- slow and steady
- mysql
- async
- ํผํ
- ๋๊ธฐ
- ์ฐธ๊ณ ๋ธ๋ก๊ทธ
- execCommand
- Project
- callback
- promise
- prj
- db
- JS #ํ๋ก์ ํธ
- webpack
- json
- eport
- Import
- js
- ๊ฒ์
- setTimeout()
- database
- Today
- Total
๋ชฉ๋ก๐ป๊ฐ๋ฐ ๋ ธํธ (21)
C-log
๋ณดํธ๋์ด ์๋ ๊ธ์ ๋๋ค.
๋ธ๋ก๊ทธ ํฌ์คํ ๊ธฐ์ค ๋๋ฌด ๋๋ ๊ธด ๊ณต๋ฐฑ์ด์๋ค. ๋ธ๋ก๊ทธ ๊ธฐ์ค์ผ๋ก ๊ธด ์๊ฐ ๋์ ์๋ฆฌ๋ฅผ ๋น์ ์ง๋ง ์ ๋ง ๋ง์ ๊ฒ๋ค์ ์คํํ๊ณ ์คํํด๋ดค๋ค. ๋ฌผ๋ก ์ง๋ ๋ฌ 2์ฃผ ์ ๋๋ ์ค๊ฐ๊ณ ์ฌ ์ํ์ด ์์ด์ ๊ฑฐ๊ธฐ์ ๋งค์ง์ ํด์ผ ํ์ง๋ง ๊ฐ๋ฐ ์๋๋ฅผ ๋ง์ถ๊ธฐ ์ํด ์ํ ๊ณต๋ถ๋ฅผ ๋ท์ ์ผ๋ก ๋๊ณ ํ๋ก์ ํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ๊ณต๋ถ๋ฅผ ์ผ๊ธ์ผ๊ธ ์งํ ํ๋ค. 1๋ฌ๊ฐ ์งํ ํ๋ ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด์ผ๊ธฐ๋ฅผ ํ์ด๊ฐ ๋ณผ ๊ฒ์ด๋ค. ์์ฝ๊ฒ๋ ์ค๊ฐ ์ค๊ฐ ์๋ ์ผ๋ค์ ํ๋ํ๋ ๋ด์๋ด์ง ๋ชปํ์ ๋ฟ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช ํ๋ฉด์ ๊ธฐ์ต๋๋ ์ค์ํ ๊ฒ๋ค์ ๋ด์ ๋ผ ๊ฒ์ด๋ค. ๋จผ์ ์ง๊ธ๊น์ง ๋ด๊ฐ ์ ์ํ ์ฝ๋์ ๊ตฌ์กฐ๋๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.์ฌ๊ธฐ์ ๊ฐ์ฅ ์ฐ๋ฆฌ๊ฐ ์ค์ ์ผ๋ก ๋ณด์์ผํ ํ์ผ์ EditorExam์ด๋ค. ์๊ฐ์ ๋ง์ด ๋ค์๋ ๋ถ๋ถ์ด๋ค. ์๋ฌด๋๋ editor ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ํ..
๋ณดํธ๋์ด ์๋ ๊ธ์ ๋๋ค.
๋ณดํธ๋์ด ์๋ ๊ธ์ ๋๋ค.
Document.execCommand() - Web API | MDNHTML ๋ฌธ์๊ฐ designMode๋ก ์ ํ๋๋ฉด ๋ฌธ์์์ execCommand ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋๋ฐ ์ด๊ฒ์ ์ด์ฉํด์ ๋ฌธ์์ ํธ์ง ๊ฐ๋ฅํ ์์ญ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๋ช ๋ น์ด๋ ๋ฌธ์์ ์ ํ ์์ญ์ ์developer.mozilla.orgํ์ฌ execCommand ์์ผ๋ก ์ง์์ด ์ค๋จ๋ ์์ ์ด๋ค. execCommand๋ฅผ ๋์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ฌด์ํ ๋ง์ง๋ง ์ํ๋ ํํ์ ์ฝ๋ ์ ์ง ๋ณด์๊ฐ ๋งค์ฐ ๋ถํธํ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํด๊ณผ ์๋ํฐ๋ฅผ ์ ์ํ๊ธฐ๋ก ํ๋ค. ๊ฐ๋ฐ์ ํ๋ฉด์ execCommand๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ๋ฐ์ ์์ํ์ง๋ง ์๊ฐ๋ณด๋ค ๋ง์ ๊ณ ๋ ค๋ฅผ ํด์ผํด์ ์ฐ์ ์ execCommand ๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐ์ ์งํ ํ..
const [imageFiles, setImageFiles] = useState([]); // ์ด๋ฏธ์ง ํ์ผ๋ค์ ์ ์ฅํ ๋ฐฐ์ด ์ํ const [imageUrl, setImageUrl] = useState([]); ... // ์๋ํฐ๊ฐ ์ ๋ฐ์ดํธ๋ ๋ ์ด๋ฏธ์ง ์ฝ์ useEffect(() => { if (editorRef.current && imageFiles.length > 0) { const file = imageFiles[imageFiles.length - 1]; insertImageDate(file); } }, [editorRef.current, imageFiles]); const handleImageSelect = (e) => { const files = e.target.files; if (!!file..
์์ ํฌ์คํ ์์ react-quill์ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ์๋ํฐ์ ํด๋ฐ๋ฅผ ์ ์ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ๋๊ฐ์ง๋ฅผ ์์์ผ ํ๋ค. ์ฒซ ๋ฒ์งธ๋ก contentEditable๊ณผ execCommand์ด๋ค. # contentEditable contentEditable์ HTML ์์์ ์์ฑ(attribute) ์ค ํ๋๋ก, ์ฌ์ฉ์๊ฐ ํด๋น ์์์ ๋ด์ฉ์ ์ง์ ํธ์งํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ์ญํ ์ ํ๋ค. ๋ฐ๋ผ์ ์ํ๋ ํ๊ทธ์ contentEditable="true"๋ฅผ ๊ธฐ์ ํ๊ฒ ๋๋ฉด ์น ํ์ด์ง๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ ์คํธ ์ ๋ ฅ ์์๋ ํธ์ง ๊ฐ๋ฅํ ์ปจํ ์ธ ๊ฐ ๋๋ค. ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค. ๋ฐ๋ผ์ divํ๊ทธ๊ฐ ํธ์ง์ ํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค. ์ฌ์ฉ์๊ฐ ์ ๋ ฅ์ ์ง์ ๊ธฐ์ ํ ์ ์๋ ์๋ํฐ๋ก ์ง์ ์ด ๋ ๊ฒ์ด๋ค..
์ด์ ๋๋ง์ ์ํ์ง๋ฅผ ์์ฑํ ์ ์๋ ํ์ด์ง๋ฅผ ์ ์ํ ๊ฒ์ด๋ค. ๋ชจ๋ ๊ธฐ๋ฅ์ ํด์ ์ผ์ผ์ด ์ ์ํ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์ ๋น ๋ฅด๊ฒ ์์ ์ ์ํํ๋ฉด ์ข๊ฒ๋ค๊ณ ํ๋จ์ ํ๋ค. FEํ์์ด ์์๋ด์ค ๊ฒฐ๊ณผ react-quill์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๋ณด์ ์๋ฃ๊ฐ ๋ง๋ค๊ณ ์ถ์ฒ์ ํด์ฃผ์๋ค. ๊ทธ๋์ ์ด๋ฒ ์๊ฐ์๋ react-qull ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์๋ณด๋ ค๊ณ ํ๋ค. ์ฐ์ react-quill ๋ผ์ด๋ธ๋ฌ๋ฆด npm์ผ๋ก ์ค์นํ๊ณ ๊ธฐ๋ณธ์ ์ธ ์ธํ ์ ํด๋ณด๊ฒ ๋ค. ๊ธฐ๋ณธ์ ์ธ ์ธํ ์ ์๋์ ๊ฐ๋ค. # setting react-quill import ReactQuill from "react-quill" export default function EditTestSplit() { return ( Test ) } ์์ ๊ฐ์ด ์์ฑํ๊ณ ๋ธ๋ผ์ฐ์ ๋ก..