일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프론트엔드
- 세로메뉴바
- 코드공유
- 실기
- 자바스크립트
- JavaScript
- 웹디자인기능사실기
- 비전공자
- 생활코딩
- 렛츠기릿자바스크립트
- git
- 웹디자인기능사
- Supabase
- 슬라이드전환
- 리액트
- 정보처리기사
- 웹디실기
- 깃
- 웹퍼블리셔
- github
- 코딩독학
- 연산자
- jQuery
- PROJECT
- web
- CSS
- 타입스크립트
- react
- HTML
- JS
Archives
- Today
- Total
코딩하는라민
[React/Project] input 으로 업로드한 여러 개의 이미지 하나씩 삭제하기 본문
728x90
반응형
[React/Project] input 으로 업로드한 여러 개의 이미지 하나씩 삭제하기
📌 업로드한 여러개의 이미지 개별 삭제하기
✅ 삭제 버튼을 만들어준다.
<button type="button">
<img alt="업로드 이미지 제거" src="src/assets/icon-close-button.svg" />
</button>
✅ 버튼에 클릭 이벤트를 걸어준다.
<button type="button" onClick={removeImg}>
<img alt="업로드 이미지 제거" src="src/assets/icon-close-button.svg" / >
</button>
✅ 이렇게 클릭 이벤트를 걸어주면 이미지 전체가 지워진다.
function removeImg() {
setPostImg([]);
setPreviewImg([]);
}
단순히 이렇게해서 상태를 초기화한다면, 어떤 x 버튼을 눌러도 업로드된 이미지가 모두 제거될 것이다.
그렇다면 내가 누른 버튼의 index 를 파악해서 그 index에 해당하는 파일의 index 번째 파일을 지워야할 것.
✅ 매개변수에 index 를 넣어주고, 파일과 파일 url 을 전개해 변수에 넣어준다.
function removeImg(index) {
const removePostImg = [...postImg];
const removePreviewImg = [...previewImg];
}
removePostImg 와 removePreviewImg 에 각각 파일과 파일 url 을 전개해서 넣어준다.
removePostImg 와 removePreviewImg 는 이제 배열이 되었으니 배열의 요소를 제거해줄 수 있는 splice 메서드를 사용할 수 있을 것이다.
✅ splice 로 배열의 요소 1개 삭제하기
function removeImg(index) {
const removePostImg = [...postImg];
removePostImg.splice(index, 1);
const removePreviewImg = [...previewImg];
removePreviewImg.splice(index, 1);
}
removePostImg 와 removePreviewImg 배열의 index 번째 요소를 1개 삭제하기
이제 변경된 상태를 업데이트 해줘야한다.
✅ state 업데이트
function removeImg(index) {
const removePostImg = [...postImg];
removePostImg.splice(index, 1);
setPostImg(removePostImg);
const removePreviewImg = [...previewImg];
removePreviewImg.splice(index, 1);
setPreviewImg(removePreviewImg);
}
✅ 콜백함수에 매개변수 추가
이대로라면 내가 클릭한 이미지가 아닌 최근에 추가한 이미지부터 삭제가 된다.
따라서 버튼의 콜백함수 내 매개변수에 map 함수의 매개변수 중 인덱스에 해당하는 i 를 넣어준다.
previewImg.map((url, i) =>
<ProductImage key={i}>
<button type="button" onClick={()=>removeImg(i)}>
<img alt="업로드 이미지 제거" src="src/assets/icon-close-button.svg" />
</button>
<img alt={url} src={url} />
</ProductImage>
)
이렇게 하면 원하는 이미지만 제거가 가능하다!
✅ 완성
📌 관련 포스팅
참고 :
등을 공부하고, 간단하게 정리한 내용입니다. 잘못된 부분이나 문제되는 점이 있으면 댓글 부탁드립니다.
🔅 멋쟁이사자처럼 프론트엔드 4기 파이널 프로젝트
📝 당근마켓 클론코딩
🧑🏻💻 작업 인원 : 5인
🕑 프로젝트 기간 : 23.03.10 ~ 03.28
🔧 기술 스택
• Toolchains : Vite
• Style : Styled Component
• 상태 관리 : Recoil
• Severless : Firebase
728x90
반응형
'프로젝트 관련 > Project' 카테고리의 다른 글
[React/Project] 이미지 압축해서 업로드하기 (with browser-image-compression 라이브러리) (0) | 2023.03.25 |
---|---|
[React/Project] Recoil Persist 를 사용해 로컬스토리지에 데이터 저장/불러오기 (0) | 2023.03.25 |
[React/Project] input 파일 이미지 업로드 & 미리보기(Preview) 기능 구현(다중 이미지) (0) | 2023.03.18 |
[React/Project] input 파일 이미지 업로드 & 미리보기(Preview) 기능 구현(단일 이미지) (1) | 2023.03.18 |
[React/Project] input disabled 를 이용한 다중 입력값에 따른 버튼 활성/비활성화 (1) | 2023.03.17 |