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

[이송아] sprint11 #745

Conversation

soma0078
Copy link
Collaborator

@soma0078 soma0078 commented Jul 19, 2024

요구사항

  • 로컬 스토리지에 accessToken이 있는 경우 상단바 ‘로그인’ 버튼이 판다 이미지로 바뀝니다.

로그인

  • 유효한 정보를 입력하고 스웨거 명세된 “/auth/signUp”으로 POST 요청해서 성공 응답을 받으면 회원가입이 완료됩니다.
  • 로그인이 완료되면 로컬 스토리지에 accessToken을 저장하고 “/” 로 이동합니다.
  • 로그인 페이지에 접근시 로컬 스토리지에 accessToken이 있는 경우 ‘/’ 페이지로 이동합니다.

회원가입

  • 회원가입을 성공한 정보를 입력하고 스웨거 명세된 “/auth/signIp”으로 POST 요청을 하면 로그인이 완료됩니다.
  • 회원가입이 완료되면 “/login”로 이동합니다.
  • 회원가입 페이지에 접근시 로컬 스토리지에 accessToken이 있는 경우 ‘/’ 페이지로 이동합니다.

심화

  • 로그인, 회원가입 기능에 react-hook-form을 활용해봅니다.

스크린샷

image
image

멘토에게

  • Tailwind CSS와 리액트 훅 폼 적용해 봤습니다.

@soma0078 soma0078 requested a review from jyh0521 July 19, 2024 17:02
@soma0078 soma0078 self-assigned this Jul 19, 2024
@soma0078 soma0078 added 미완성🫠 죄송합니다.. 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. labels Jul 19, 2024
Copy link
Collaborator

@jyh0521 jyh0521 left a comment

Choose a reason for hiding this comment

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

과제하느라 고생하셨습니다! 👍

pageSize: params.pageSize.toString(),
}).toString();
export async function getProducts(params = {}) {
const query = new URLSearchParams(params).toString();

try {
const response = await fetch(`https://panda-market-api.vercel.app/products?${query}`);
Copy link
Collaborator

Choose a reason for hiding this comment

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

base url 부분은 .env 파일로 관리해보시는 것을 추천드려요!

}): Promise<Comment[]> {
const { productId, params: queryParams } = params;

export async function getProductComments({ productId, params }: { productId: number; params: {} }) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

params에도 어떤 타입이 들어올지 명시해주시는 것이 좋습니다.

import styled from 'styled-components';
import { ReactComponent as CloseIcon } from '../../assets/images/icons/ic_x.svg';

interface DeleteButtonProps {
type DeleteButtonProps = {
Copy link
Collaborator

Choose a reason for hiding this comment

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

interface에서 type으로 바꿔주신 이유가 있나요?

onSortSelection: (value: string) => void;
}
type DropdownMenuProps = {
onSortSelection: (value: 'recent' | 'favorite') => void;
Copy link
Collaborator

Choose a reason for hiding this comment

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

recent나 favorite 같은 값들은 상수로 관리해주시는 것을 추천드립니다. 그리고 상수를 이용해서 타입을 지정해줄 수도 있어요!


const PaginationBar = ({ totalPageNum, activePageNum, onPageChange }: PaginationBarProps) => {
const maxVisiblePages = 5;
let startPage: number = 1;
let startPage = 1;
Copy link
Collaborator

Choose a reason for hiding this comment

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

page 변수들도 상수로 관리할 수 있게 해주시면 어떨까요?

@@ -7,6 +7,7 @@ import ItemProfileSection from './components/ItemProfileSection';
import ItemCommentSection from './components/ItemCommentSection';
import { ReactComponent as BackIcon } from '../../assets/images/icons/ic_back.svg';
import LoadingSpinner from '../../components/UI/LoadingSpinner';
import { Product } from '../../types/ProductTypes';
Copy link
Collaborator

Choose a reason for hiding this comment

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

alias path를 사용해보시는 것도 추천드립니다!

@@ -18,23 +19,25 @@ const BackToMarketPageLink = styled(StyledLink)<{ $pill?: string }>`
`;

function ItemPage() {
const [product, setProduct] = useState(null);
const [product, setProduct] = useState<Product | null>(null);
Copy link
Collaborator

Choose a reason for hiding this comment

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

null 대신에 undefined를 사용해주시는 것도 추천드려요! undefined를 사용하면 null 값을 추가적으로 사용하지 않아도 되기 때문입니다.

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.

리액트 훅 폼 잘 활용해주셨네요! 👍


function AllItemsSection() {
const [orderBy, setOrderBy] = useState('recent');
const [orderBy, setOrderBy] = useState<OrderBy>('recent');
Copy link
Collaborator

Choose a reason for hiding this comment

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

OrderBy를 상수로 선언하고, 타입으로 활용할 수 있습니다. keyof나 typeof 같은 키워드를 한번 검색해보시는 것을 추천드릴게요!

@jyh0521 jyh0521 merged commit a663e23 into codeit-bootcamp-frontend:React-이송아 Jul 22, 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