먼저 여러장의 이미지를 업로드하고 미리보기 위해
images: {
detailImageFile: [],
detailImageUrl: [],
},
위와 같은 state를 생성한다.
<div className="choice_file">
<label htmlFor="file_box" className="btn_prod">
사진 선택
</label>
<input
type="file"
accept=".jpg, .jpeg, .png"
id="file_box"
onChange={({ target: { files } }) => {
if (files.length) {
setImageFromFile({
file: files[0],
setImageUrl: ({ result }) =>
this.setState({
...this.state,
detailImageFile: this.state.images.detailImageFile.push(
files[0]
),
detailImageUrl: this.state.images.detailImageUrl.push(
result
),
}),
})
}
}}
/>
</div>
이후 위와 같이 file type의 input 박스를 만들어 준 뒤 onChange의 인자로 실행 할 함수와 setState를 넘겨준다.
실행이 되면
setImageFromFile = ({ file, setImageUrl }) => {
let reader = new FileReader()
reader.onload = function () {
setImageUrl({ result: reader.result })
}
reader.readAsDataURL(file)
}
위 함수에서 file과 url을 state에 저장한다.
{images.detailImageFile &&
images.detailImageUrl.map((image, index) => (
<span className="quickSearch_image_area" key={index}>
<div>
<img
id="image_cancle"
src="static/assets/images/image_cancle.svg"
alt=""
/>
</div>
<div>
<img src={image} alt="image" />
</div>
</span>
))}
위와 같이 Map 함수를 이용해 여러 장의 이미지를 미리보기로 띄워줄 수 있으며, 취소 버튼또한 생성하여 state 배열에서 원소를 지워주는 방식으로 업로드한 이미지를 삭제할 수 있다.
'React.js' 카테고리의 다른 글
[React] Modal창 생성하기 (0) | 2022.04.20 |
---|---|
[nextJS] localStorage 사용하기 (0) | 2022.04.14 |
[React] checkBox 기능 구현 시 setState 관련 이슈 (0) | 2022.04.04 |
[React] nextJS에서 채널톡 서비스 이용하기 (0) | 2022.03.30 |
[React] [object Object] 출력 문제 (0) | 2022.03.21 |