<React_input>
input으로 첨부한 이미지 미리보기에 대해 알아보자
<STUDY>
1. 파일 첨부
지난 포스팅에서 input 파일을 첨부하고 버튼 꾸미는 방법에 대해 소개했다.
궁금하다면 포스팅 참고하기
👉[리액트] input [type='file'] 폼 꾸미기_🎵 / 버튼으로 파일 첨부
2. 이미지 경로 추가할 state 생성
``````
import React, { useState } from 'react';
// 생략
``````
const [imgPath, setImgPath] = useState(); // 단일 이미지
const [imgPath, setImgPath] = useState([]); // 여러 이미지
💡 이미지를 여러장 보여줄 경우 배열로 state를 생성한다.
3. label 태그에 onChange 이벤트 추가
❔ URL.createObjectURL(object)
- input 으로 가져온 이미지의 주소를 생성해야 하는데 이 때 브라우저 상에서 사용 가능한 url을 생성해 준다.
- object : File, Blob, MediaSource
- 자세한 내용은 👉여기서👈 봐주세요!
``````
import React, { useState } from 'react';
// 생략
``````
const [imgPath, setImgPath] = useState([]);
const addImage = event => {
for (let i = 0; i < event.target.files.length; i++) {
const newPath = [...state.imgPath, URL.createObjectURL(event.target.files[i])];
setImgPath(newPath);
}
};
``````
<label
className='inputFileLabel'
htmlFor='inputForm'
onChange={event => addImage(event)} // onChange 이벤트 추가
>
업로드 // 버튼에 들어갈 원하는 글자
<input className='inputFile' type='file' id='inputForm' />
</label>
💡 event.target.files : 첨부된 이미지의 정보 (배열이 아닌 객체로 나타남)
❕ 객체형태로 나타나기 때문에 for 반복문을 사용하여 imgPath state에 추가해 주었다
4. 이미지 보여주기
{
imgPath.map((file, index) => (
<Box key={index}>
<img src={file} alt='사진' />
</Box>
))
};
💡 업데이트 된 state를 map을 사용하여 보여주면 된다
이미지 url을 생성하는 부분에서 조금 헷갈렸지만 구현하는데 크게 어려운 부분은 없었던 것 같다.
이미지가 아닌 파일을 첨부하는 경우 이름을 보여주고 싶으면 같은 방법으로 구현하면 된다.
내가 보려고 정리하는 리액트🔆
'STUDY > React & React Native' 카테고리의 다른 글
[리액트] 서버에서 받은 파일 다운로드_📂 / createElement, a tag, URL.createObjectURL (0) | 2022.08.22 |
---|---|
[리액트] 이미지 파일 서버로 전송하기 / axios, input, multipart/form-data (0) | 2022.08.18 |
[리액트] input [type='file'] 폼 꾸미기_🎵 / 버튼으로 파일 첨부 (2) | 2022.08.09 |
[리액트] state 업데이트 느린 경우_💡 / useState, useEffect (0) | 2022.08.07 |
[리액트 네이티브] 네트워크 확인하기 / NetInfo, Expo (0) | 2022.08.04 |