-
Notifications
You must be signed in to change notification settings - Fork 0
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
KDT5_김성은_6조 #74
base: main
Are you sure you want to change the base?
KDT5_김성은_6조 #74
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다.
전체적으로 잘 구현해 주셨습니다.
UI도 보기 좋게 잘 구현해 주신 것 같습니다.
readme도 잘 작성해 주시고
commit 도 잘 나누어서 작성해 주셔서 좋습니다.
commit message 작성은 조금 더 고려가 되면 더욱 좋을 것 같습니다.
함수 명이나 로직을 조금 더 확인하면 좋을 것 같습니다.
검색 전에 view more 버튼이 나와있어 어색한 것 같습니다.
this.el.innerHTML = ` | ||
<div class="movies"></div> | ||
<div class="loading hide"></div> | ||
` | ||
const moviesEl = this.el.querySelector('.movies') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
innerHTML로 붙이고
다시 querySelector로 찾는 것은 좋지 않은 것 같습니다.
createElement 하시거나 Template strings으로 필요한 요소를 만든 후에
한번에 붙이는 것이 좋을 것 같습니다.
</span> | ||
<img src="${movie.poster === 'N/A' ? 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/dc/No_Preview_image_2.png/1200px-No_Preview_image_2.png?20200726064257' : movie.poster}" onerror="this.onerror=null;)" alt="이미지를 불러올 수 없습니다."> | ||
` | ||
moviesEl.append(movieEl) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
반복적으로 append 하는 것은 좋지 않은 것 같습니다.
요소를 전부 만든 후에 한번에 붙여주는 방법이 권장됩니다.
movieStore.subscribe('pageMax', () => { | ||
const { page, pageMax } = movieStore.state | ||
pageMax <= page ? this.el.classList.remove('hide') : this.el.classList.add('hide') | ||
console.log(pageMax, page) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
확인이 끝난 후에는 console.log 지워주세요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵 알겠습니다!
export default class MovieListMore extends Component { | ||
constructor() { | ||
super({}) | ||
movieStore.subscribe('pageMax', () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
구조상 pageMax 값이 동일하더라도
할당이 이루어져 재렌더링이 일어나지만
의미적으로는 page 의 변화를 바라보고 있어야 할 것 같습니다.
현재 구조에서는 아래처럼 될 것 같아요.
movieStore.subscribe('pageMax', () => { | |
movieStore.subscribe("page", () => { | |
const { page, pageMax } = movieStore.state; | |
if (page === 1) { | |
this.el.classList.remove("hide"); | |
return; | |
} |
|
||
const btnClickHandler = async (page) => { | ||
movieStore.state.page += 1 | ||
await totalPages(movieStore.state.page) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
totalPages 함수가 movieStore 안에 있는데
movieStore.state.page를 굳이 빼서 더해주는 이유가 있을까요?
또한 영화 검색 결과를 더 가져오는 요청인데 totalPages 는 이름이 어색한 것 같습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아니요! 특별한 이유는 없습니다. 코드 작성 다시 살펴보고 수정해두겠습니다!
함수명은 함수 역할에 맞게 수정하겠습니다 :)
} | ||
|
||
this.el.innerHTML = ` | ||
<div style="background-image: url(${bigPoster})" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
인라인 스타일을 주지 않고 구현 가능한 방법은 없을까요?
export default store | ||
export async function requestAll(searchText, year = '', page = 1) { | ||
const s = `&s=${searchText}` | ||
const y = `&y=${year}` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
인자로 제대로 값을 받는 경우가 없는 것 같습니다.
method: 'GET' | ||
}) | ||
//로딩끝 | ||
store.state.loading = false |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
try 문 내에 로딩 끝을 내시면
요청 실패하여 catch로 가게되면 무한히 로딩 컴포넌트만 보일 것 같아요.
store.state.loading = false | ||
|
||
if (data.Response === 'True') { | ||
store.state.pageMax = data.totalResults < 20 ? 1 : Math.ceil(data.totalResults / 10) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
계산이 문제가 있어 보이는데 < 20 이 맞나요?
} | ||
|
||
//영화 전체 페이지 계산 | ||
export async function totalPages(page) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
페이지 계산이 아닌 requestAll 함수가 불리면서 요청이 발생합니다.
두 함수 이름이 동작과 맞지 않는 것 같습니다.
6조 김성은
영화 검색 사이트
2023.5.6 [18:50] ver
'결과물 보기'
❗ 필수
❔ 선택
문제점 ❎
영화 검색 로딩 애니메이션[수정 완료 : API로딩 함수 pageMax 문제 ]영화를 검색하고 'view more'버튼으로 다음 페이지를 불러는것 까지는 작동. 이후에 같은 영화 목록이 무한대로 불러와짐[수정 완료 : 증가함수 코드 문제 ]영화 상세페이지 내 감독, 장르 데이터 연동 안됨[수정 완료:오타]영화 검색 시 포스터, 제목, 출시년도 중 년도 데이터 못읽음 -> undefined[수정 완료:오타]아쉬운 점 💦
배운 점 ✅
구조