์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 29 |
30 | 31 |
- promise
- ์ฐธ๊ณ ๋ธ๋ก๊ทธ
- object
- mysql
- js
- JS #ํ๋ก์ ํธ
- https://youtube.com/playlist?list=PLuHgQVnccGMA5836CvWfieEQy0T0ov6Jh&si=FTaYv8m21EhO-A2K
- slow and steady
- webpack
- execCommand
- ajax
- setTimeout()
- database
- addEventListener
- Import
- sql
- ๊ฒ์
- json
- ํผํ
- eport
- https://m.blog.naver.com/tt2t2am1118/221010125300
- await
- ๋น๋๊ธฐ
- async
- Project
- Porject
- callback
- prj
- ๋๊ธฐ
- db
- Today
- Total
C-log
[FE]๋๋ง์ ์ํ์ง์ ์๋ํฐ์ ํด๋ฐ๋ฅผ ์ง์ ์ ์ํ๋ค.(์ด๋ฏธ์ง ์ฒจ๋ถ ํด๋ฐ ์ ์) ๋ณธ๋ฌธ
[FE]๋๋ง์ ์ํ์ง์ ์๋ํฐ์ ํด๋ฐ๋ฅผ ์ง์ ์ ์ํ๋ค.(์ด๋ฏธ์ง ์ฒจ๋ถ ํด๋ฐ ์ ์)
4:Bee 2024. 3. 24. 00:51* handleImageSelect
์์ ์ฝ๋๋ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๊ณ ํ์ผ์ด ์ ํ๋๋ฉด ํด๋น ํ์ผ์ ์ด๋ฏธ์ง ํ์ผ ๋ฐฐ์ด์ ์ถ๊ฐํ๊ณ handleSave ํจ์๋ฅผ ํธ์ถํ๋ ์ญํ ์ ํ๋ค.
ํ์ผ ์ ํ <input> ์์๋ฅผ ํด๋ฆญํ์ฌ ํ์ผ์ ์ ํํ๋ ์์
์ ์ํํ๊ฒ ๋๋ฉด ํ์ผ ์ ํ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ handleImageSelect ํจ์๊ฐ ํธ์ถ๋๋ค.
* const files = e.target.files;
e.target.files๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ์ ํํ ํ์ผ ๋ชฉ๋ก์ ์ ๊ทผ์ ํ๋ค.
* if (!!files && files.length > 0) {...}
์ ํ๋ ํ์ผ์ด ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด !!files๋ฅผ ์ฌ์ฉํ๋ค. ์ด๊ฒ์ ์ ํ๋ ํ์ผ์ด ์กด์ฌํ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค. ์ ํ๋ ํ์ผ์ด ์กด์ฌํ๊ณ ํ์ผ ๋ชฉ๋ก์ ๊ธธ์ด๊ฐ 0๋ณด๋ค ํฐ์ง ํ์ธํ๋ค.
* const file = files[0];
files[0]์ ํตํด ํ์ผ ๋ชฉ๋ก์์ ์ฒซ ๋ฒ์งธ ํ์ผ์ ๊ฐ์ ธ์จ๋ค. ์ด๊ฒ์ ๋จ์ผ ํ์ผ ์ ํ์ ๊ฐ์ ํ๋ค.
* setImageFiles([...imageFiles, file]);
์ด๋ฏธ์ง ํ์ผ ๋ฐฐ์ด์ ํ์ฌ ํ์ผ์ ์ถ๊ฐํ๊ธฐ ์ํด spread ์ฐ์ฐ์ ...๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ์ด๋ฏธ์ง ํ์ผ ๋ฐฐ์ด๊ณผ ์๋ก์ด ํ์ผ์ ๋ณํฉํ๋ค.
* handleSave();
๋ง์ง๋ง์ผ๋ก handleSave ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ณ๊ฒฝ๋ ์ด๋ฏธ์ง ํ์ผ ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
* insertImageDate
์์ ์ฝ๋๋ ์ด๋ฏธ์ง ํ์ผ์ ์ฝ๊ณ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ ํ๊ณ ๋ ๋๋งํ๋ ํจ์์ด๋ค.
* const insertImageDate = (file) => { const reader = new FileReader(); ...}
insertImageDate ํจ์๋ ํ์ผ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค. ์ด ํ์ผ์ ์ด๋ฏธ์ง ํ์ผ์ด๋ค. ํจ์๊ฐ ํธ์ถ๋๋ฉด, FileReader ๊ฐ์ฒด๋ฅผ ์์ฑํฉํ๋ค. ์ด ๊ฐ์ฒด๋ ํ์ผ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
* reader.onload = function (e) { const imageDataUrl = e.target.result; ...}
FileReader ๊ฐ์ฒด์ onload ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ค์ ํ๋ค. ํ์ผ์ ๋ก๋ฉ์ด ์๋ฃ๋๋ฉด ํด๋น ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ํธ์ถ๋๋ค. ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด์์๋ FileReader์ result ์์ฑ์ ํตํด ์ฝ์ ํ์ผ์ ๋ฐ์ดํฐ url์ ๊ฐ์ ธ์จ๋ค. ๋ฐ์ดํฐ url์ ํ์ผ์ ๋ด์ฉ์ ๋ํ๋ด๋ url์ด๋ค.
* const imgElement = document.createElement('img');
imgElement.src = imageDataUrl;
setImageUrl([...imageUrl, imgElement.src]);
๊ฐ์ ธ์จ ๋ฐ์ดํฐ์ url์ ์ฌ์ฉํ์ฌ <img> ์์๋ฅผ ์์ฑํ๊ณ ์ด <img> ์์์ src ์์ฑ์ ๋ฐ์ดํฐ url์ ์ค์ ํ๋ค. ์๋ก์ด ์ด๋ฏธ์ง url์ ์ด๋ฏธ์ง url ๋ฐฐ์ด์ ์ถ๊ฐํ๋ค. ์ด ๋ฐฐ์ด์ ์ด๋ฏธ์ง url๋ค์ ์ถ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
* if (editorRef.current) {
editorRef.current.appendChild(imgElement);
} else {
console.error("Editor reference is null.");
}
๋ง์ฝ editorRef๊ฐ null์ด ์๋๋ผ๋ฉด ์ด๋ฏธ์ง๋ฅผ ์ฝ์ ํ ํธ์ง๊ธฐ ์์์ ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํ๋ค. ์ด๋ฅผ ์ํด ์์ฑ๋ <img> ์์๋ฅผ ํด๋น ํธ์ง๊ธฐ ์์์ ์ถ๊ฐํ๋ค. ๋ง์ฝ editorRef๊ฐ null์ด๋ผ๋ฉด ์ฝ์์ "Editor reference is null."์ด๋ผ๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
* useEffect(()=>...)
์์ ์ฝ๋๋ useEffect ํ ์ ์ฌ์ฉํ์ฌ ํธ์ง๊ธฐ๊ฐ ์ ๋ฐ์ดํธ๋ ๋ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ ํ๋ ์ญํ ์ ํ๋ค.
useEffect ํ
์ ํจ์๋ฅผ ์ปดํฌ๋ํธ์ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฌผ์ด ํ๋ฉด์ ๋ฐ์๋ ํ์ ์คํ์ํจ๋ค. ์์กด์ฑ ๋ฐฐ์ด์ ์๋ ๊ฐ๋ค ์ค ํ๋๋ผ๋ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํจ๊ณผ ํจ์๊ฐ ๋ค์ ์คํ๋๋ค. ์ฌ๊ธฐ์ ์์กด์ฑ ๋ฐฐ์ด์๋ editorRef.current์ imageFiles๊ฐ ์๋ค.
* if (editorRef.current && imageFiles.length > 0) {...}
editorRef.current๊ฐ ์กด์ฌํ๊ณ , imageFiles ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 0๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ง ์กฐ๊ฑด๋ฌธ์ด ์คํ๋๋ค.
* const file = imageFiles[imageFiles.length - 1];
์กฐ๊ฑด๋ฌธ ๋ด์์๋ imageFiles ๋ฐฐ์ด์์ ๊ฐ์ฅ ์ต๊ทผ์ ์ถ๊ฐ๋ ์ด๋ฏธ์ง ํ์ผ์ ๊ฐ์ ธ์จ๋ค. ๊ฐ์ ธ์จ ํ์ผ์ insertImageDate ํจ์๋ฅผ ํธ์ถํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ ํ๋๋ฐ ์ฌ์ฉํ๋ค.
์ฆ, ์ ์ฒด์ ์ผ๋ก ํ๋ฆ์ ์ดํด๋ณด๋ฉด handleImageSelect๊ฐ ์ ํ์ด ๋๊ณ useEffect๊ฐ ์์กดํ๊ณ ์๋ ์์กด์ฑ ๋ฐฐ์ด์ธ imageFiles์ ์ํ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด์ useEffect๊ฐ ์ ๋ฐ์ดํธ๊ฐ ๋๋ฉด์ insertImageDate๋ก ์ด๋ฏธ์ง๊ฐ ์ ๋ก๋๊ฐ ๋๋ฉด์ appendChild๋ฅผ ํตํด editorRef์ ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ ํ๊ณ ์ ๋ ฅ๋์ div์ ์ด๋ฏธ์ง๊ฐ ์์ฑ์ด ๋๋ ๊ฒ์ด๋ค.