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

[박지민] sprint10 #657

Conversation

JiminN2
Copy link
Collaborator

@JiminN2 JiminN2 commented Jun 7, 2024

요구사항

기본

  • 상품 등록 페이지 주소는 “/addboard” 입니다.
  • 게시판 이미지는 최대 한개 업로드가 가능합니다.
  • 각 input의 placeholder 값을 정확히 입력해주세요.
  • 이미지를 제외하고 input 에 모든 값을 입력하면 ‘등록' 버튼이 활성화 됩니다.
  • 회원가입, 로그인 api를 사용하여 받은accessToken을 사용하여 게시물 등록을 합니다.
  • ‘등록’ 버튼을 누르면 게시물 상세 페이지로 이동합니다.
    상품 상세 페이지
  • 상품 상세 페이지 주소는 “/addboard/{id}” 입니다.
  • 댓글 input 값을 입력하면 ‘등록' 버튼이 활성화 됩니다.
  • 활성화된 ‘등록' 버튼을 누르면 댓글이 등록됩니다.

심화

  • [x]
  • []

주요 변경사항

스크린샷

image

멘토에게

  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@JiminN2 JiminN2 added the 미완성🫠 죄송합니다.. label Jun 7, 2024
@JiminN2 JiminN2 requested a review from jyh0521 June 7, 2024 15:11
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.

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

Copy link
Collaborator

Choose a reason for hiding this comment

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

공통으로 사용될 styled-component를 따로 관리해주시는 점 좋네요!

Copy link
Collaborator

Choose a reason for hiding this comment

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

styled-component는 컴포넌트 하단에 작성해주시는 것이 좋습니다. styled-component가 많아 질수록 컴포넌트 코드가 하단에 배치되서 찾아가기 힘들어지기 때문입니다!

Comment on lines +53 to +55
function getLinkStyle(isActive: boolean) {
return { color: isActive ? "var(--blue)" : undefined };
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

style을 적용하기 위해 공통으로 사용될 함수를 잘 만들어주셨네요!

</nav>
</HeaderLeft>
<HeaderRight>
<Image src={profileImg} alt="프로필" width={50} />
Copy link
Collaborator

Choose a reason for hiding this comment

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

next/image는 크기값을 줘야하기 때문에 width와 height 둘 다 작성해주시는 것을 추천드립니다.

import Image from "next/image";

export default function AddImage() {
const [imgSrc, setimgSrc] = useState<string>("/images/default-image.png");
Copy link
Collaborator

Choose a reason for hiding this comment

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

상태를 문자열로 초기화 해주시는 경우, 타입추론에 의해서 상태가 string으로 추론 되기 때문에 useState에 string 타입을 명시해주시지 않아도 괜찮습니다!

Comment on lines +19 to +21
useEffect(() => {
console.log(imgSrc);
}, [imgSrc]);
Copy link
Collaborator

Choose a reason for hiding this comment

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

console.log는 제거해주시는 것을 추천드립니다!

<div>
<h2>이미지</h2>
<input type="file" accept="image/*" onChange={handleChange} />
<Image src={imgSrc} alt="" width={200} height={150} priority />
Copy link
Collaborator

Choose a reason for hiding this comment

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

priority 옵션 잘 사용해주셨네요.

Comment on lines +7 to +38
const Container = styled.div`
padding: 20px;
margin: auto 360px;

.SubmitSection {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}

.title,
.content,
.image {
margin-bottom: 20px;
}

label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}

input {
width: 100%;
padding: 10px;
font-size: 16px;
border: 1px solid #ccc;
border-radius: 12px;
background-color: #f3f4f6;
}
`;
Copy link
Collaborator

Choose a reason for hiding this comment

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

className을 각각 style-component로 만들어주셔서 사용하는 방법도 추천드립니다.

Comment on lines +12 to +38
static async getInitialProps(
ctx: DocumentContext
): Promise<DocumentInitialProps> {
const sheet = new ServerStyleSheet();
const originalRenderPage = ctx.renderPage;

try {
ctx.renderPage = () =>
originalRenderPage({
enhanceApp: (App) => (props) =>
sheet.collectStyles(<App {...props} />),
});

const initialProps = await Document.getInitialProps(ctx);
return {
...initialProps,
styles: (
<>
{initialProps.styles}
{sheet.getStyleElement()}
</>
),
};
} finally {
sheet.seal();
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

next.js에서 getInitialProps 보다는 getServerSideProps 사용을 추천하기 때문에 활용해보시면 좋을 것 같습니다.
getInitialProps를 사용하시면 정적 생성은 활용할 수 없어지기 떄문입니다.

import axios from "axios";

const instance = axios.create({
baseURL: "https://panda-market-api.vercel.app",
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 파일에 넣어서 사용하고, .gitignore에 추가해서 관리해보시는 것을 추천드립니다.

@jyh0521 jyh0521 merged commit 909a87f into codeit-bootcamp-frontend:Next.js-박지민 Jun 10, 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