Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

5조 과제(홍혜원, 김지영, 이은영, 조승후) #6

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

whtmdgn1409
Copy link

@whtmdgn1409 whtmdgn1409 commented Jan 20, 2023

Front-End : React Youtube Clone

🔗 YouTube 페이지

🔗 Team5 배포 페이지

🔗 Team5 Git Repository

🔗 Team5 Notion


🦖 팀 소개

-----------------------------------------------------

김지영 이은영 조승후 홍혜원
김지영 이은영 조승후 홍혜원
메인페이지 헤더 및 사이드바
레이아웃
영상 상세 페이지 검색 페이지

🦖 프로젝트 기간

-----------------------------------------------------

1차 : 2023.01.23(월) ~ 2023.01.20(금)

2차 : 2023.01.25(수) ~ 2023.02.03(금)


🦖 기술 스택

-----------------------------------------------------

Html CSS3 JavaScript React
Post CSS SASS .env Html Netlify
Github Prettier




🦖 작업 상세 내용

-----------------------------------------------------

👩‍💻김지영

[메인페이지]
  • 비디오카드 생성
    • 비디오카드 호버링 시 3초 후 비디오 재생
  • 무한 스크롤 가능

👩‍💻이은영

[레이아웃] - 영상 디테일 페이지 : 사이드바 모달 형태 - 그외 페이지 - 사이드바 반응형에 따라, main 영역 사이즈 변경됨 - 스크롤 디자인
[헤더] - 검색바 반응형
[사이드바] - 데스크탑 사이즈에서는 버튼 클릭시, 토글로 열림 - 태블릿과 모바일 사이즈에서는 버튼 클릭시, 모달로 열림 - 모달일 때 - 사이드바 외 영역 클릭시, 모달 닫기 - 버튼으로 모달 닫기 - hover 시에만 스크롤 보임

👩‍💻조승후

  • 영상플레이어
  • 댓글리스트
  • 관련영상리스트

👩‍💻홍혜원

검색페이지
  • 해당 키워드에 관한 영상 나오기
    • header 컴포넌트 input에서 value값 받아오기
    • 채널 이미지 불러오기
    • 동영상 조회수 불러오기
    • 레이아웃
상세페이지
  • 댓글창 부분 컴포넌트화

-----------------------------------------------------



⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️

🙏2차 피드백 받고 싶은 점, 궁금한 점

👩‍💻김지영
👩‍💻이은영
  • 1차 피드백 받은대로 레이아웃용 컴포넌트를 추가했습니다. 잘 사용한 것인지 궁금합니다.

  • 반응형은 최대한 css로 하는 것이 좋은 건가요? header와 sidebar 컴포넌트에서 반응형별 컴포넌트를 다르게 보여주는 부분이 있습니다. 이걸 css로 가져가는게 더 좋은 방법인걸까요?

  • 중첩 삼항연산자를 쓰는 것에 대해 어떻게 생각하시나요?

👩‍💻조승후
👩‍💻홍혜원
⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️

@whtmdgn1409 whtmdgn1409 changed the title 제발들어가 5조 과제(홍혜원, 김지영, 이은영, 조승후) Jan 20, 2023
Copy link

@sangheon-kim sangheon-kim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생많으셨습니다

슬랙으로 전체 코멘트 드렸고, 기타 나머지 사항들도 해당 PR에 코멘트 드렸습니다

src/App.js Outdated
<QueryClientProvider client={queryClient}>
<Header setMenuDrop={setMenuDrop} />
<div style={{ display: 'flex' }}>
{location.pathname === '/watch/:videoId' ? null : <Sidebar menuDrop={menuDrop} />}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

상세인 경우와 아닌 경우에 대해서 별도로 명명해서 레이아웃용 컴포넌트를 만들었더라면 어땠을까하는 아쉬움이 있네요 그렇게하면 추후에 App에서 코드 수정이 아닌 레이아웃 컴포넌트를 변경하면 되지않나 생각듭니다.

{ path: 'watch/:videoId', element: <VideoDetail /> },
{ path: 'results', element: <VideoSearch /> },
{ path: 'results/:keyword', element: <VideoSearch /> },
],

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굳굳 너무 칭찬합니다 :) 리액트 라우터를 너무 깔끔하게 잘썼어요 ㅎㅎ

params: { key: process.env.REACT_APP_YOUTUBE_API_KEY },
});

export default instance;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

인스턴스 만들어서 사용한것 개인적으로 칭찬합니다~ 근데 export default 보다 차라리 명시적으로 instance명을 붙여서 export해주면 나중에 서버 여러대와 api 송수신을 할때 authInstance, todoInstance 등 각 사용처에 맞게 처리해두는 것도 나중에 확장성에서 좋지 않을까 생각합니다 ㅎ

// }
// })
// })
// }

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fake Api를 만드시는 시도는 좋았습니다 ㅎ
msw라는 목킹 라이브러리를 사용해보는 것도 좋을 것 같습니다.

https://www.daleseo.com/mock-service-worker/

return response.data.items[0].snippet.thumbnails.default.url;
};

// 조회수 api

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

jsdoc 형식으로 주석 명시해주세요

/** 조회수 api */

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이유는 바꿔보시고 해당 함수 사용처나 현재 해당함수에서 마우스오버해보세요

// 이벤트 핸들러 해제
document.removeEventListener('mousedown', clickDocument);
document.removeEventListener('touchstart', clickDocument); // 모바일 대응
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

잘하셨습니다 :)

</button>
<button>
<MdOutlineRestore className={styles.sidebarIcon} size="24"></MdOutlineRestore>시청기록
</button>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

하드코딩 자제해주세요

<p className={styles.time}>{timeFormat(publishedAt)}</p>
</div>
);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

잘하셨습니다 :)

if (viewCount >= 100000) {
return (viewCount / 10000).toFixed() + '만회';
}
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

단위라고 명시해주는게 더 좋은 명명아닐까요?? viewCount 단위

return <VideoCards />;
};

export default Videos;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굳이... 이렇게 파일을 분리하신이유가 있으실까요?

@sangheon-kim
Copy link

sangheon-kim commented Jan 23, 2023

동영상 시간이 무조건 2숫자씩 되게 했습니다. 하지만, 10분 이하인 동영상인 경우, 분이 2글자일 필요가 없는데 더 좋은 방법이 있을지 궁급합니다.
-> timestamp값을 계산한 후 조건 처리를 해주세요 :)
조회수 함수를 더 좋게 만들 방법이 있을 지 궁금합니다.
-> 흠..어떻게 좋게를 원하시는지 구체적인 설명이 필요합니다
시간 관계 상 필터와 미니 플레이어를 넣지 못해서 아쉽습니다.
-> 다음 2차때는 넣은 것 보여주시면 좋겠습니다.
무한 스크롤를 위해 axios를 불러와 데이터를 usestate에 넣었는데, 더 좋은 방법이 있을지 고민이 됩니다.
-> Intersection Observer를 활용해보세요

피드백 받고 싶은 점

페이지 공통 레이아웃

  • 헤더와 사이드바를 fixed로 설정했고 outlet은 헤더와 사이드바만큼 반응형마다 다르게 margin을 줬습니다. 괜찮은 방법인지 궁금합니다. 혹은 fixed된 공통 컴포넌트와 아웃렛을 margin을 주지 않고도 겹치지 않게 설정할 수 있는 방법이 있는지 궁금합니다.
    -> sticky에 대해서도 한번 알아보시는것을 권장합니다. 아예 margin을 준 Contents영역을 주고 거기에 outlet을 담아주면 될 것 같습니다.

[img src 대신 import로 이미지 불러오기]

  • 이미지를 img src로 불러오는 것이 안돼서 import 하였습니다. 혹시 원인에 대해 아시는 것이 있으면 알려주시면 감사하겠습니다.
    -> img src에는 외부 url이나 public에 담긴것만 불러올 수 있습니다. 기본적으로 public 폴더가 아닌 src에 담긴 것은 webpack이나 vite로 작성한 경우 해당 프로젝트의 로더에 동작 처리에 따라 다릅니다. 만약 img src로 넣고싶으시다면 public내부에 image폴더를 만들어서 public폴더를 / 기준으로 불러서 작업해보세요

창크기별로 반응형을 만들고, 창크기별로 버튼에 다른 모션을 주는 것이 어려웠습니다. 버튼을 누르면 확장형 사이드바가 없어지거나 모달 사이드바가 뜨는 것에 대해, state를 하나로 하여 작업하다가 두 개로 변경하여 작업했습니다. 이 과정에서 헤더와 사이드바, app.js 전체 레이아웃 등 고려해야할 것이 많아 어려웠습니다. useContext를 사용해야 했는지 궁금합니다.
-> 너비에 따라서, 액션을 정의해주는 함수를 만들어주면 좋겠네요

useRef - useRef 사용하는 것이 어려웠고, 수정하여 없어진 부분이나 자식 컴포넌트로 ref prop을 넘겨주는 것이 불가능 해 fowardRef 를 사용하려 했습니다. 하지만 에러가 났는데 해결하지 못해 사용하지 못했습니다.
-> 해당 부분은 현재는 확인이 안되어 답변을 못드리고 있습니다
-> https://beta.reactjs.org/reference/react/useImperativeHandle 찾고 계신게 이거일까요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants