inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]

더보기 버튼 아이템 딱 8개 일 때

476

Minji Lee

작성한 질문수 2

0

안녕하세요!

카드 아이템이 딱 8개일 때는 더보기 버튼이 안 보여야하는데,

보이는 걸 해결하려면 PostSize >= Limit이 아니라 PostSize > Limit 으로 하면

될 줄알았는데, 안되더라구요! 왜 그런지 설명해주시면 감사하겠습니다!

{PostSize >= Limit && (
<div style={{ justifyContent: 'center' }}>
<button onClick={loadMoreHandler}>LOAD MORE</button>
</div>
)}

nodejs mongodb react redux 웹앱

답변 5

6

신지호

이 질문 보고 저도 고민하다가 해결방법을 찾아서 답변 드립니다!

LandingPage가 처음 랜더링될 때, skip 0 limit 8 을 body로 보내잖아요.

그러면 몽고db에서는 0부터 8개까지의 정보만 찾아옵니다.

productInfo는 8개가 되는 거고, postSize 또한  productInfo의 길이인 8이 되는 거죠.

그렇기 때문에 랜딩페이지에서의 PostSize도 8이 됩니다. PostSize > Limit 을 할 경우에,

8 > Limit 이 false가 되므로 더보기는 사라지게 되지만, 상품이 9개,10인 경우엔 더보기 버튼이 없기 때문에 loadMoreHandler가 실행되지 않아 추가적으로 상품들을 불러올 수가 없습니다. 그렇기 때문에 PostSize >= Limit 을 하신거 같아요 :)

그래서 이걸 어떻게 해결할 수 있을까 생각해봤는데, 제가 생각한 방법은

처음에 요청을 할 때, body를 빼고 요청을 하고, 전체의 productInfo를 받아옵니다.

그러면 PostSize는 전체 productInfo의 길이가 되고 PostSize > Limit 을 했을 때,

상품이 8개인 경우에 더보기 버튼은 사라지고 9개 이상인 경우에는 더보기버튼이 나타나게 됩니다.

그리고 또 수정해야 할 건

getProducts 함수에서 이부분을,

} else {
setProducts(response.data.productInfo);
}

이렇게 slice를 이용해서 0부터 8개까지의 정보만 Products에 저장을 시킵니다.

} else {
setProducts(response.data.productInfo.slice(0, 8));
}

그러면 처음 랜더링될 때 8개의 정보만 화면에 나오게 됩니다.

나머지는 그대로 하시면 됩니다.

2

오쯔

그래서 제가 생각한 해결법은 서버 쪽에서 다음 상품이 있는지 찾고 있으면 false, 0개이면 true 를 반환하는 쪽이 좋지 않을까 의견을 드립니다!

Product.find()
        .populate("writer")
        .skip(skip)
        .limit(limit)
        .exec((errproductInfo=> {
            if (errreturn res.status(400).json({ success: falseerr });
            Product.find()
                .skip(skip + limit)
                .limit(limit)
                .exec((errnext=> {
                    return res.status(200).json({
                        success: true,
                        productInfo,
                        postSize: productInfo.length,
                        next: next.length === 0,
                    });
                });
       });

0

김창호

이게 정답이네요. 감사합니다.

0

오쯔

제가 잘 이해를 못했을 수도 있습니다!.

그런데 의문점이 있어서 제가 생각한 것들을 말씀드릴게요!

8개의 상품이 있을 때는 답변해주신 분 의도대로 더보기가 안보이지만

만약 16개의 상품이면 처음에 더보기가 당연히 보일것이고

그 다음 더보기를 누르면 8개의 상품이 나오는데 그때 더보기가 보이지 않나요???

그리고 처음에 한번에 전체 데이터가 8개 이상인지 가져오신다고 하셨는데,

만약 100000개가 넘는 데이터가 있다면 처음에 렌더링을 할때 100000개의 데이터를 다 찾아봐서 서버에 무리가 될수 있을 것이라고 생각합니다. ㅠㅠ

0

John Ahn

앗 저도 배우고 가네요 ^^  너무 좋은 질문과 답변 감사합니다 ~~~~!!!!!! 

0

Minji Lee

우와! 초보라 어려웠는데, 한번에 이해가 잘되네요!! 해결방법 까지..답변 너무 감사드립니다!! :D 좋은 주말 되세요!!~

강의 내용은 훌륭하나, 환경 설정 오류 때문에 진도를 나갈 수 없습니다. 20년 버전 강의.

0

60

1

강의자료는 어디서 볼 수있나요??

0

66

1

이 쇼핑몰 만들기 강의는 관리자페이지 만드는건 없나요

0

114

2

웹에서 실시간 코드반영이 안돼요

0

120

1

app.use질문

0

64

1

강사님께 어떻게 직접질문할수있어요??

0

75

1

const함수같은거 기초강의는 어디있나요

0

81

2

리덕스 참조챕터가 어딨어요? 미리듣고오라는데요

0

81

2

강의가완전 오래되서 다 틀리네 app.jsx도 tailwind css 다틀림 무책임함

0

68

1

개발자도구에 redux란이 없어요

0

88

1

npx tailwindcss init -p 에서 계속 에러나요

0

92

1

쇼핑몰기능중 찜하기 기능은 어떻게 구현하나요

0

138

2

강의하다 줌으로 설명가능한지좀 정확히 알려주세요. 이 선생님 정책이 어떻게 되는데요. 직접 연락할 메일이라도 알려주세요

0

43

1

도표 강의 자료 열람 불가능

0

109

1

tailwindcss를 vite에서 이용하는 방식이 바뀐것 같습니다.

0

1132

2

eslint 설정 후 오류가 납니다.

0

222

1

오버로드 오류

0

150

1

VSCode에서 save를 할 때, landingpage의 useEffect가 실행되는 문제에 대하여

0

169

1

dispatch(logoutUser()) 실행시 dispatch(authuser())도 함께 실행되는 문제

0

228

2

logout할 때, server로 요청을 보내서 authUser middleware를 통과하도록 하는 이유?

0

195

1

webkit-text-size-adjust 오류

0

314

1

does not provide an export named 'userReducer'

0

217

2

빌드 배포

0

140

1

삭제 예정 강의는 언제 삭제 되나요? 저것때문에 수강완료를 못하면 회사에서 비용을 청구한다고 합니다~

0

220

2