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

[윤혜림] Sprint6 #226

Conversation

y5037
Copy link
Collaborator

@y5037 y5037 commented Nov 29, 2024

요구사항

기본

  • Github에 PR(Pull Request)을 만들어서 미션을 제출합니다.
  • 피그마 디자인에 맞게 페이지를 만들어 주세요.
  • React를 사용합니다

상품 등록

  • 상품 등록 페이지 주소는 “/additem” 입니다.
  • 페이지 주소가 “/additem” 일때 상단네비게이션바의 '중고마켓' 버튼의 색상은 “3692FF”입니다.
  • 상품 이미지는 최대 한개 업로드가 가능합니다.
  • 각 input의 placeholder 값을 정확히 입력해주세요.
  • 이미지를 제외하고 input 에 모든 값을 입력하면 ‘등록' 버튼이 활성화 됩니다.
  • API를 통한 상품 등록은 추후 미션에서 적용합니다.

체크리스트 [심화]

  • 이미지 안의 X 버튼을 누르면 이미지가 삭제됩니다.
  • 추가된 태그 안의 X 버튼을 누르면 해당 태그는 삭제됩니다.

스크린샷

스크린샷 2024-11-30 오전 9 40 35 스크린샷 2024-11-30 오전 9 41 38

멘토에게

  • 미션5 코드리뷰 반영 중입니다. 최대한 할 수 있는 범위까지 적용하여 추가 커밋 해보겠습니다.
  • API를 통한 상품 등록은 추후 미션에서 적용한다는 요구사항이 있어 보류한 상태로 미션6 제출하였습니다.
  • 로그인과 회원가입 페이지 작업했던 내용을 공부삼아 리액트 버전으로 옮겨보았는데 코드가 많이 번잡합니다. 어떻게 정리해야할 지 고민중입니다.
  • https://nerim-pandamarket-react.netlify.app/additem

@y5037 y5037 requested a review from 1005hoon November 29, 2024 06:17
@y5037 y5037 added the 순한맛🐑 마음이 많이 여립니다.. label Nov 29, 2024
y5037 added 22 commits November 29, 2024 16:10
Copy link
Collaborator

@1005hoon 1005hoon left a comment

Choose a reason for hiding this comment

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

혜림님! 멘토링에서 이야기했던 내용들을 최대한 적용하려 하시는게 보이는 코드네요 ㅎㅎ
너무 고생 많으셨습니다.

이제 client side 상태들을 어떻게 효율적으로 관리할지, 데이터 모델링 차원에서의 고민이 필요한 상황으로 보이는데요, 그래도 되게 이런저런 시도들을 잘 해주셔서 금방 감을 잡으실것 같아요!

아마 내일 진행하는 멘토링에서 어느정도 설명을 드려 감을 잡으실 수 있으리라 생각해봅니다.

자세한 리뷰는 코드단에 남겨두었으니 한번 체크 부탁드릴게요. 고생 많으셨습니다!

@@ -1,18 +1,22 @@
{
"name": "sprint5",
"name": "pandamarket",
Copy link
Collaborator

Choose a reason for hiding this comment

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

nice 👍🏻

@@ -1,4 +1,4 @@
async function productData({ orderBy, pageSize, search, page }) {
async function getProductData({ orderBy, pageSize, search, page }) {
const query = `page=${page}&orderBy=${orderBy}&pageSize=${pageSize}&keyword=${search}`;
Copy link
Collaborator

Choose a reason for hiding this comment

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

query string은 URL Search Params를 사용해보면 어떨까요?
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams

@@ -1,4 +1,4 @@
async function productData({ orderBy, pageSize, search, page }) {
async function getProductData({ orderBy, pageSize, search, page }) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

함수이름 개편 좋습니다 👍🏻

import { Outlet } from "react-router-dom";

function App() {
return <Outlet />;
Copy link
Collaborator

Choose a reason for hiding this comment

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

오 좋아요! 👍🏻

Copy link
Collaborator

Choose a reason for hiding this comment

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

콤포넌트가 아니니 소문자로 파일 이름을 작성해볼까요?

onChange={getEmailInfo}
required={emailRequiredChk ? true : false}
/>
<p className={styles.txtWarning}>{emailWarnMsg}</p>
Copy link
Collaborator

Choose a reason for hiding this comment

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

에러 메시지가 있을 때만

태그를 렌더링하고 있어 좋은 접근이에요. 하지만 조건부 렌더링을 더 간단하게 작성할 수 있어요:

{errors.email && <p className={styles.txtWarning}>{errors.email}</p>}
{errors.password && <p className={styles.txtWarning}>{errors.password}</p>}

이렇게 작성하면 가독성이 조금 더 좋아질 거예요.

Comment on lines +12 to +14
const formattedPrice = item.price
.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
Copy link
Collaborator

Choose a reason for hiding this comment

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

오 좋은 방법이네요 ㅎㅎ
다만, number 데이터 타입에서 바로 이런식으로도 처리가 가능하답니다

const number = 1234567.89;
const formattedNumber = number.toLocaleString();
console.log(formattedNumber); // Output: 1,234,567.89

Comment on lines 47 to +54
<ProductSearchForm
productList={productList}
setProductList={setProductList}
productContainer={productContainer}
setProductContainer={setProductContainer}
page={page}
setPage={setPage}
pageCount={pageCount}
setPageCount={setPageCount}
setIsDataCount={setIsDataCount}
Copy link
Collaborator

Choose a reason for hiding this comment

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

오 좋은데요? 다만 productContainer가 활용되지 않는듯 한데 한번 체크가 필요해보여요.

Comment on lines +57 to +70
{productContainer.length !== 0 ? (
productContainer.map((item) => {
return (
<li key={item.id} className={styles.item}>
<GeneralItem item={item} />
</li>
);
})}
})
) : (
<div className={styles.emptyList}>
<img src={notFoundImg} alt="Not Found" />
<p>검색하신 상품을 찾을 수 없습니다</p>
</div>
)}
Copy link
Collaborator

Choose a reason for hiding this comment

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

이렇게 분리해보면 좀 더 직관적일듯해요!

{productContainer.length === 0 && <EmptyPlaceholder />}
{productContainer.length > 0 && ... }

// onKeyDown 이벤트 키가 Enter와 일치하면 실행
const activeEnter = (e) => {
const regExp = /[ \{\}\[\]\/?.,;:|\)*~`!^\+┼<>@\#$%&\'\"\\\(\=]/gi;
// onKeyDown 이벤트의 한글 입력 시 이벤트가 두 번 호출 되는 버그 방지
Copy link
Collaborator

Choose a reason for hiding this comment

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

👍🏻

@1005hoon
Copy link
Collaborator

1005hoon commented Dec 4, 2024

그리고 커밋 메시지 너무 잘 남겨주겨계셔서 좋습니다! 👍🏻

@1005hoon 1005hoon merged commit f26bc7f into codeit-bootcamp-frontend:React-윤혜림 Dec 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
순한맛🐑 마음이 많이 여립니다..
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants