FE RYAN
완벽하지 않으면 어때
FE RYAN
전체 방문자
오늘
어제

블로그 메뉴

  • 💾 깃허브 링크
  • 홈
  • 태그
  • 분류 전체보기 (151)
    • 개인프로젝트 (8)
      • 개인 포트폴리오 웹앱 (6)
      • 프론트엔드 기술면접 아카이빙 웹앱 (2)
    • 기록 (121)
      • 원티드 프리온보딩 인턴십 (0)
      • 코드스테이츠 프론트엔드 (75)
      • 생각들 (3)
      • Today I learned (32)
      • 회고 (9)
      • 리뷰 (1)
    • 개발 (17)
      • React (3)
      • Javascript (7)
      • CSS (1)
      • HTML (3)
      • HTTP (1)
      • 자료구조 (0)
      • 알고리즘 (2)
    • 코딩테스트 (2)
      • 백준 (2)
      • 프로그래머스 (0)
    • 디자인 (1)
      • UI & UX (1)
    • 수학 (0)
    • 자기계발 (0)

공지사항

인기 글

태그

  • 신입개발자
  • 원시타입
  • 회고
  • 코드스테이츠
  • css
  • 프론트엔드
  • Til
  • ES6
  • seb 39
  • seb39
  • 자바스크립트 딥다이브
  • useMemo
  • 타입스크립트
  • 딥다이브
  • 자바스크립트
  • 포트폴리오
  • HTML
  • 메인프로젝트
  • 리액트
  • 부트캠프

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
FE RYAN

완벽하지 않으면 어때

기록/코드스테이츠 프론트엔드

9.20 화 - 메인프로젝트 데일리 회고

2022. 9. 21. 12:40
728x90

1. 체크리스트

오늘

  • [x] sns 포스트 업로드 폼
    • [x] 이미지, 텍스트 입력 모두 요청 데이터로 반영, 이미지 여러장 업로드
    • [x] 여러장 업로드 가능하도록 수정
    • [x] 라우팅이 아닌 모달창으로 팝업되도록 구현
  • [x] 데일리스크럼 회의록 정리

이번주

  • ec2 ↔ s3 연결
  • 회원관리 기능(회원가입, 로그인, jwt 인가) 프론트, 백 모두 완성
  • FE - 마이페이지, SNS 기능 페이지와 세부 컴포넌트들 가급적 완성(로직 x, 스타일)

2. 오늘 한 일

2.1 SNS 포스트 업로드 폼 완성

  • [x] 모달창으로 구현
  • [ ] 시멘틱 태그를 사용해서 마크업부분 리팩토링
  • [x] 미리보기 이미지 캐러셀로
  • 모달창 구현 참고
  • 낙타의 블로그 :: 효율적인 modal 관리 with React(1)

1. 이미지 여러장 업로드하기

  1. input 태그에 multiple={true} 속성을 부여한다. (현재 airbnb 린트 설정으로는 불린값이 true면 속성명만 기재토록 강제함)
  2. 이미지 파일 입력을 받는 state를 setState 할때 배열로 받도록 수정
  3. form-data에 데이터 추가시 append해서 추가해야 하므로 for-of 문으로 이미지 여러장 append해서 submit 하기
// 1. input 태그에 multiple 속성을 true로 부여.
// airbnb 방식 린트 설정을 사용하는 경우 ={true}는 생략하고 속성명만 기재.

<S.FormDropperBox>
              <S.FileDropIconBox>
                <img src={UploadIcon} alt="upload-icon" />
              </S.FileDropIconBox>
              <label htmlFor="image">{fileName}</label>
              <input
                id="image"
                type="file"
                multiple
                accept="image/*"
                onChange={imgSelectHandler}
              />
            </S.FormDropperBox>
            <S.FormSubmitBtn type="submit">업로드</S.FormSubmitBtn>
// 2. 이미지 파일 입력을 받는 state를 setState 할때 배열로 받도록 수정
const [files, setFiles] = useState(null);

const imgSelectHandler = (e) => {
    const imageFiles = e.target.files;
    setFiles(imageFiles);

    // const imageFile = imageFiles[0];
    // setFileName(imageFile.name);
    // const fileReader = new FileReader();
    // fileReader.readAsDataURL(imageFile);
    // fileReader.onload = (event) => setImgSrc(event.target.result);
  };

2. 이미지 여러장 미리보기

const [files, setFiles] = useState(null);
  const [previews, setPreviews] = useState([]);
  const [fileName, setFileName] = useState(defaultFileName);
  const [textMsg, setTextMsg] = useState('');

  const imgSelectHandler = async (e) => {
    const imageFiles = e.target.files;
    setFiles(imageFiles);

    // * Refactor
		// 프로미스 지원이 안되기 때문에 새로 프로미스를 만들어야 함.
		// fileReader는 비동기로 동작함.
    const imagePreviews = await Promise.all(
      [...imageFiles].map(async (imageFile) => {
        return new Promise((resolve, reject) => {
          try {
            const fileReader = new FileReader();
            fileReader.readAsDataURL(imageFile);
            fileReader.onload = (event) =>
              resolve({
                imgSrc: event.target.result,
                fileName: imageFile.name,
              });
          } catch (err) {
            reject(err);
          }
        });
      }),
    );
    setPreviews(imagePreviews);
  };

// map 메서드로 img 태그 여러개 생성
const previewImages = previews.map((preview) => (
    <img
      src={preview.imgSrc}
      alt=""
      className={preview.imgSrc && 'show'}
      key={preview.imgSrc}
    />
  ));

3. 캐러셀

ant design 캐러셀을 사용했다.

참고: https://ant.design/components/carousel/#components-carousel-demo-basic


4. 모달창 구현

  • 모달창 구현 참고
  • 낙타의 블로그 :: 효율적인 modal 관리 with React(1)

728x90
저작자표시 비영리 변경금지

'기록 > 코드스테이츠 프론트엔드' 카테고리의 다른 글

9.22 목 - 메인프로젝트 데일리 회고  (0) 2022.09.23
9.21 수 - 메인프로젝트 데일리 회고  (1) 2022.09.22
9.19 월 - 메인프로젝트 데일리 회고  (0) 2022.09.19
9.18 일 - 메인프로젝트 데일리 회고  (1) 2022.09.19
9.17 토 - 메인프로젝트 데일리 회고  (0) 2022.09.18
    '기록/코드스테이츠 프론트엔드' 카테고리의 다른 글
    • 9.22 목 - 메인프로젝트 데일리 회고
    • 9.21 수 - 메인프로젝트 데일리 회고
    • 9.19 월 - 메인프로젝트 데일리 회고
    • 9.18 일 - 메인프로젝트 데일리 회고
    FE RYAN
    FE RYAN

    티스토리툴바