React

React ์ค‘๋ณต ํŒŒ์ผ ์—…๋กœ๋“œ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

martinooo 2024. 3. 14. 14:47
728x170

 

๐Ÿคท‍โ™‚๏ธ React์—์„œ ๋™์ผํ•œ ํŒŒ์ผ ์—…๋กœ๋“œ ๊ตฌํ˜„


ํ”„๋กœ์ ํŠธ์ค‘์— PDF ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋‹น์‹œ ๋™์ผํ•œ ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•˜๋Š” ๊ฒฝ์šฐ  inputํƒœ๊ทธ์˜ onChange ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. 

 

ํŒŒ์ผ ์—…๋กœ๋“œ ๊ณผ์ • 

๋ธŒ๋ผ์šฐ์ €์—์„œ PDF ์—…๋กœ๋“œ๋ฅผ ํด๋ฆญํ•˜๋ฉด ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ ์ฐฝ์ด ์—ด๋ฆฌ๊ณ  ํŒŒ์ผ์„ ์„ ํƒํ›„์— ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•œ๋‹ค. 

 

์—ฌ๊ธฐ์„œ ์˜ค๋ฅ˜๋Š” ๋™์ผํ•œ ํŒŒ์ผ์„ ๋‘๋ฒˆ ์ด์ƒ ์—…๋กœ๋“œ์‹œ onChange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ์˜€๋‹ค. 

20230920001_00_40.pdf ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ณ  ๋‹ค์‹œ 20230920001_00_40.pdf ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋ฉด onChange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

์ •๋ฆฌ: React์—์„œ ๋™์ผํ•œ ํŒŒ์ผ์„ ์—ฐ์†ํ•ด์„œ ์„ ํƒํ–ˆ์„ ๋•Œ input ํƒœ๊ทธ์— onChange ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์•„์„œ ๋™์ผํ•œ ํŒŒ์ผ์€ ์—ฐ์†์ ์œผ๋กœ ์—…๋กœ๋“œํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. 

 

 

 

๐Ÿคท‍โ™‚๏ธ ๋ฌธ์ œ ํ•ด๊ฒฐ 


๋‹ค์Œ ์˜ˆ์ œ ์†Œ์Šค๋กœ ๋™์ผํ•œ ํŒŒ์ผ์„ ์—ฐ์†ํ•ด์„œ ์„ ํƒํ–ˆ์„ ๋•Œ onChange ์ด๋ฒคํŠธ๊ฐ€ ๋™์ž‘ํ•˜๊ฑฐ๋‚˜ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‚ดํŽด๋ณด์ž.

 

์ค‘๋ณตํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋ฉด onChange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ์ฝ”๋“œ

<Button
  component="label"
  sx={{ fontSize: '16px' }}
  fullWidth={true}
  variant="text"
  size="small"
  startIcon={<SvgPdfUpload />}>
  PDF ์—…๋กœ๋“œ
  <VisuallyHiddenInput
    type="file"
    multiple
    onChange={onFileChange}
    accept=".pdf,.PDF"
  />
</Button>

 

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ ์‹œ๋‚˜๋ฆฌ์˜ค

  1. ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฒ„ํŠผ ํด๋ฆญ
  2. ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ ์ฐฝ์—์„œ test_file.pdf ํŒŒ์ผ ์„ ํƒ ํ›„ ์—ด๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ
  3. ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ ์ฐฝ์—์„œ test_fileB.pdf ํŒŒ์ผ ์„ ํƒ ํ›„ ์—ด๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ
  4. ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ ์ฐฝ์—์„œ test_file.pdf ํŒŒ์ผ ์„ ํƒ ํ›„ ์—ด๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ

์ค‘๋ณต๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ํŒŒ์ผ ์—…๋กœ๋“œ๊ฐ€ ์ž˜๋˜์—ˆ๋‹ค. 

 

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ ์‹œ๋‚˜๋ฆฌ์˜ค

  1. ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฒ„ํŠผ ํด๋ฆญ
  2. ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ ์ฐฝ์—์„œ test_file.pdf ํŒŒ์ผ ์„ ํƒ ํ›„ ์—ด๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ
  3. ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ ์ฐฝ์—์„œ test_file.pdf ํŒŒ์ผ ์„ ํƒ ํ›„ ์—ด๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ

๊ฐ™์€ ํŒŒ์ผ์„ ์—…๋กœ๋“œ์‹œ onChange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜์ง€ ์•Š์•„์„œ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์—†๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์œ„ ๋ฌธ์ œ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ์›์ธ์€ ๊ฐ™์€ ์ค‘๋ณต ํŒŒ์ผ์„ uploadํ•  ๊ฒฝ์šฐ onChange event๊ฐ€ trigger๋˜์ง€ ์•Š๋Š”๋‹ค.

* onChange๋Š” ์‹ค์งˆ์ ์ธ ๋‚ด์šฉ ๋ณ€ํ™”์—๋งŒ trigger๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. e.target.value ์—…๋กœ๋“œํ•œ file ๊ฐ’์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ์—…๋กœ๋“œํ•  ๊ฒฝ์šฐ ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š์•˜๋‹ค๊ณ  ์ธ์ง€ํ•ด์„œ onChange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜์ง€ ์•Š๋Š”๋‹ค.  

 

๋”ฐ๋ผ์„œ file์ด uploade๋˜๋ฉด onChange ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” input ํƒœ๊ทธ์— onClick ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  event.target.value๋ฅผ ๋นˆ ๊ฐ’ ('') ๋˜๋Š” null๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ฝ”๋“œ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค. 

 

onChange, onClick๋กœ ๋„˜์–ด์˜ค๋Š” ์ด๋ฒคํŠธ 

e.target.value

 

์ดˆ๊ธฐ์™€ ํ•ด์ฃผ์ž

 

 

 

์ค‘๋ณตํŒŒ์ผ ์—…๋กœ๋“œ ํ•ด๊ฒฐ ์ฝ”๋“œ

//ํŒŒ์ผ ์—…๋กœ๋“œ ์ค‘๋ณตํŒŒ์ผ๋ฐฉ์ง€
const onClickPreventDuplication = (e: any) => {
  e.target.value = null;
};

<Button
  component="label"
  sx={{ fontSize: '16px' }}
  fullWidth={true}
  variant="text"
  size="small"
  startIcon={<SvgPdfUpload />}>
  PDF ์—…๋กœ๋“œ
  <VisuallyHiddenInput
    type="file"
    multiple
    onChange={onFileChange}
    onClick={onClickPreventDuplication}
    accept=".pdf,.PDF"
  />
</Button>

 

event.target.value๋ฅผ null๋กœ ํ• ๋‹นํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ input ํƒœ๊ทธ์˜ onClick์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋™์ผํ•œ ํŒŒ์ผ์„ ์—ฐ์†ํ•ด์„œ ์„ ํƒํ•˜๋ฉด onChange ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

onChange ๊ฐ’์ด ํŒŒ์ผ ์—…๋กœ๋“œ์‹œ์— ์ดˆ๊ธฐํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต๋œ ๊ฐ’์œผ๋กœ ์ธ์‹ํ•˜์ง€ ์•Š์•„์„œ ๊ฐ™์€ ํŒŒ์ผ์„ ํŒŒ์ผ ์—…๋กœ๋“œํ•ด๋„ onChange ์ด๋ฒคํŠธ ๋ฐœ์ƒ์ด ์ž˜๋œ๋‹ค. 

 

์ค‘๋ณต๋œ ํŒŒ์ผ์„ ์—ฐ์†์ ์œผ๋กœ ์—…๋กœ๋“œํ•  ์ˆ˜์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

 


URL์ธ์ฝ”๋”ฉ & ๋””์ฝ”๋”ฉ ํ•ด๋ณด๊ธฐ

 

๊ทธ๋ฆฌ๋“œํ˜•