24.12.04 - 이미지 파일 이름 표시, input type="file"

강연주·2024년 12월 4일

📚 TIL

목록 보기
108/186
  • 코드잇 TanstackQuery
  • 작업일지 작성

이미지 파일 이름 표시

현재 코드에서 파일 선택 시, 파일 이름이 화면의 파일 선택 버튼 오른쪽에 표시되는 이유는 브라우저에서 기본적으로 제공하는 <input type="file"> 요소의 동작 때문입니다.

이유:
HTML 표준 동작:

<input type="file">은 파일을 선택할 때, 선택한 파일의 이름을 표시하는 기본 동작을 제공합니다.
이는 HTML의 기본 스타일링이며, 사용자가 어떤 파일을 선택했는지 명확히 알 수 있도록 설계되었습니다.

브라우저가 기본 UI 렌더링:

파일 선택 버튼과 그 옆에 선택된 파일 이름이 표시되는 것은 브라우저에서 기본적으로 제공하는 UI입니다.
React나 다른 프레임워크를 사용해도 기본 HTML 동작을 그대로 따릅니다.

React나 JavaScript가 관여하지 않음:

React 코드에서 특별히 파일 이름을 표시하도록 구현하지 않았다면, 이는 브라우저의 기본 동작입니다.
React는 단순히 <input type="file"> 요소를 렌더링하며, 선택된 파일 이름은 브라우저가 알아서 표시합니다.


해결 방법 (파일 이름 숨기기 또는 커스터마이징):

만약 파일 이름이 표시되는 기본 동작을 제거하거나 커스터마이징하고 싶다면, 다음 방법 중 하나를 사용할 수 있습니다.

  1. 기본 UI 숨기기
    CSS를 사용해 파일 이름 표시를 숨길 수 있습니다.
css
코드 복사
input[type="file"] {
  display: none;
}

이후, 파일 선택 버튼을 커스터마이징하려면 레이블(label) 요소와 JavaScript를 사용해 파일 선택을 트리거합니다.

jsx
코드 복사
<div>
  <label htmlFor="imageUpload">파일 선택</label>
  <input
    id="imageUpload"
    type="file"
    ref={imageRef}
    style={{ display: "none" }} // 기본 UI 숨기기
    accept="image/*"
  />
</div>
  1. 파일 이름을 커스터마이징
    React에서 파일 선택 시 파일 이름을 표시하려면 상태를 사용합니다.
jsx
코드 복사
const [fileName, setFileName] = useState<string | null>(null);

const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {
  if (event.target.files && event.target.files[0]) {
    setFileName(event.target.files[0].name); // 선택된 파일 이름 저장
  }
};

<LabeledInput
  id="imageUpload"
  name="imageUpload"
  label="이미지 업로드"
  type="file"
  ref={imageRef}
  accept="image/*"
  onChange={handleFileChange}
/>
{fileName && <p>선택된 파일: {fileName}</p>} {/* 선택된 파일 이름 표시 */}

요약:
파일 이름이 표시되는 것은 브라우저의 기본 동작입니다. 이 동작을 커스터마이즈하거나 숨기고 싶다면 CSS와 JavaScript를 사용하여 파일 선택 동작을 제어할 수 있습니다.

profile
아무튼, 개발자

0개의 댓글