내용
- 파일찾기 버튼 클릭시 파일을 찾는 박스가 실행됨
- 이미지를 선택후 열기를 클릭하면 해당 파일 이름이 라벨에 나타남
결과

코드
const [save, setSave] = useState('');
const App =() => {
const saveImg = e => {
const saveEvent = e.target.value;
setSave(saveEvent);
};
return(
<Ul>
<TitleBox>사진업로드</TitleBox>
<PhotoSaveBox>{save}</PhotoSaveBox>
<Lable htmlFor="file">
파일찾기
<File onChange={saveImg} />
</Lable>
</Ul>
);
};
const PhotoSaveBox = styled.div`
height: 28px;
border: 1px solid lightgray;
border-radius: 3px;
width: 34vw;
margin-left: 5px;
margin-right: -10px;
padding-top: 10px;
padding-left: 10px;
`;
const Lable = styled.label`
background-color: #c4c4c4;
height: 28px;
padding: 8px 25px;
border: none;
letter-spacing: 0.5px;
cursor: pointer;
`;
const File = styled.input.attrs({
id: 'file',
type: 'file',
accept: 'image/png, image/jpeg',
})`
display: none;
`;
설명
input type='file'
의 default 값은 input 옆에 박스가 생성 또는 파일없음 이라는 글이 생기는 것이다.
이 기본값을 display: none
으로 없애준다
accept
는 어떤 파일을 받아올건지 입력한다.
input
에 onChange
가 발생하면 saveImg
함수를 호출한다.
saveImg
함수에서는 이벤트를 인자로 받아서 saveEvent
라는 변수에 event.target의 값을 저장한다.
save state에 setSave
를 이용해서 saveEvent
로 바꿔준다
input
겉에 싸고있는 label
에 스타일을 준다(photoSaveBox
)
input
을 감싸고 있는 label
에 htmlFor='file'
을 이용해서 input과 연동시킨다.
label
겉에 싸고있는 div
에 save
를 넣어주면 선택된 파일의 이름이 저장된다.