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

[4주차 기본/생각 과제] Github profile finder #5

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

Conversation

borimong
Copy link
Collaborator

@borimong borimong commented Nov 11, 2022

✨ 구현 기능 명세

  • 기본 과제
  1. react-router-dom 을 이용해 url 에 따른 컴포넌트를 나타낸다
    1. /search 에서, 검색창 및 검색 history 를 포함한 내용을 나타낸다
    2. /search/:userId 에서, userId 에 맞는 유저 정보를 받아온다 (GET 통신)
  2. 검색 history를 구현한다
    1. 검색창에 입력을 하고 검색을 할 때에 history 배열에 추가한다
    2. 입력창에 focus 될 때, history 박스가 나타나고,
      검색하거나 다른 곳을 클릭할 때 박스를 없앱니다
    3. history에 저장된 해당 유저를 누르면, 검색창에서 검색한 것과 같이 /search/:userId 로 이동한다
      1. 해당 리스트를 delete 하는 버튼을 추가한다
  3. 유저 정보 박스 내에 X(닫기) 버튼을 구현하여, 검색 전 상태로 되돌리도록 구현한다
  4. Visit 버튼 클릭하면 새로운 창이 열려 원하는 사람의 깃허브에 바로 방문할 수 있다.
  • 심화 과제
  • 생각 과제

🎁 PR Point

  • ~ 부분 이렇게 구현했어요, 피드백 부탁해요!
    image
    검색 기록 부분 모달로 구현했습니다! onClick 에 적용되어야 하는 이벤트가 두 개라서 함수 두 개를 저렇게 연달아 썼는데 가독성 있는 코드는 아닌 것 같아서요,,!! 혹시 더 똑똑한 방법이 있다면 알려주시면 감사하겠습니다!
    image
    Header.jsx 에서 모달 컴포넌트 렌더링하는 부분인데, 코드 길이가 가로로 너어무 길어서 가독성이 떨어지는 것 같아서 반성중입니다;;
    image
    Content.jsx 에서 로딩 부분 저렇게 구현하는 것이 맞을까요?? 제 컴이 너무 빨라서 그런 건지,, 로딩 화면이 뜨질 않아 여쭤봅니댜..!

😭 소요 시간, 어려웠던 점

  • 10h
  • 배열 map 하는 부분에서 시간을 정말 많이 허비했어요..(최소 4시간..?) 저는 무조건 객체 배열로 만들어서 (나중에 값 찾고, 순서 정렬하기 위해 추가적인 값들이 더 필요할 수 있으니까) 해보려고 했는데, 그렇게 했더니 react child 는 객체를 사용할 수 없으니 일반 배열을 사용하라는 경고가 나오더라구요.. 그래서 계속 시도해 보다가.. 일반 배열로 배열을 만들고,, 정렬을 포기했습니다..하하..

😎 구현 결과물

2022-11-11.11.22.01.video-converter.com.mp4

Copy link
Contributor

@joohaem joohaem left a comment

Choose a reason for hiding this comment

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

깔끔하게 컴포넌트 잘 나눴다 !!!! 고생했어 :)

포인트에 대한 답변 남겨놨어요!

export default function Header() {
const [array, setArray] = useState([]);
const [userId, setUserId] = useState("");
const [showArray, setShowArray] = useState(false);
Copy link
Contributor

Choose a reason for hiding this comment

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

boolean 타입의 변수명이 어색하네요, 동사의 변수명은 함수에서 쓰이고, 의문문이나 명사 형태가 적절할 것 같아요

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

오홍 글쿤여..!! isOpenModal 이런 식으로 바꿔보겠슴돠!!!!!

Comment on lines 24 to 28
useEffect(() => {
getGithubProfile();
}, [userName])

if (!getGithubProfile) return <div>Loading...</div>;
Copy link
Contributor

Choose a reason for hiding this comment

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

isLoading 이라는 state 값을 선언해서,
await 구문 전후로 setIsLoading true/false 로써 조작하면 어떨까 해요!

이 구문은 함수가 있는지 없는지를 판별해서 로딩을 나타내느 것이라 많이 어색하네요 (return 값으로 판별하는 것이 아니기 떄문에)

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

헐헐 무슨 의미인지 알 것 같습돠!!! 한 번 수정해 볼게여!!!! XD

@borimong borimong changed the title [4주차 기본 과제] Github profile finder [4주차 기본/생각 과제] Github profile finder Dec 2, 2022
export default function Content() {
const { userName } = useParams();
const navigate = useNavigate();
const [githubProfile, setgithubProfile] = useState({login: '', name: '', avatar_url: '', html_url: '', followers: '', following: '', public_repos: ''});

Choose a reason for hiding this comment

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

요런 애들은 initialState 같은걸로 분리해서 작성하면 가독성이 좀 나을듯!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

오 지금 보니까 그렇네!! 비슷한 것끼리 묶을 수 있는 경우 최대한 하나의 덩어리로 묶어야겠다!! 감쟘다 <3

Comment on lines 41 to 48
{array.map((array, index) => (
<SearchModal key={index}>
<ModalText
onClick={() => {
navigate(`/search/${array}`);
setModalOpen(false);
}}
>

Choose a reason for hiding this comment

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

변수 네이밍을 좀더 직관적으로? 어떤 배열을 의미하는지 알 수 있게 지으면 좋을 것 같고
map 돌리는 변수 이름이랑 인자 이름이 똑같아서 혼란스러울 수 있으니 네이밍 신경쓰면 좋을듯!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

마자.. 맨날 변수명 대충 지어놓고 나중에 헷갈려했는데, 이번 기회에 확실히 바로잡아야겠다!! 피드백 반영할게!! <3

Comment on lines 126 to 128
<Padding></Padding>
<Blank></Blank>
<Outlet />

Choose a reason for hiding this comment

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

내용물이 없는 경우 padding과 blank도 outlet처럼 클로징 태그로 써주자

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

일관성있는 코드를 짜도록 노력해야겠다..! 고마워 서영언니!!!! 좜빠 것 코드리뷰까지 반영한 후 푸시할게욤 <3

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.

3 participants