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

경북대 FE_이효은_1주차 과제 Step3 #85

Open
wants to merge 35 commits into
base: hyoeunkh
Choose a base branch
from

Conversation

Hyoeunkh
Copy link

@Hyoeunkh Hyoeunkh commented Jun 28, 2024

step 1,2,3이 모두 포함되어 있습니다.

커밋 기록 삭제하는 도중에 origin/feat-hyoeun 브랜치에서 pull 받고 push를 반복하다 보니 충돌이 여러번 일어나서 기간 내에 커밋 기록을 남기기 어려웠습니다..

@Hyoeunkh Hyoeunkh changed the title Feat hyoeun 경북대 FE_이효_1주차 과제 Step3 Jun 28, 2024
@Hyoeunkh Hyoeunkh changed the title 경북대 FE_이효_1주차 과제 Step3 경북대 FE_이효은_1주차 과제 Step3 Jun 28, 2024
@sjoleee sjoleee changed the base branch from main to hyoeunkh June 29, 2024 14:50
Copy link

@sjoleee sjoleee left a comment

Choose a reason for hiding this comment

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

안녕하세요~!

현재 storybook이 정상적으로 실행되지 않는데요, 만약 효은님 환경에서는 정상적으로 동작하고 있다면 다음 순서에 따라 한 번 진행해보실래요?

  • node_modules 폴더를 삭제한다.
  • npm i로 다시 의존성을 설치한다.
  • npm run storybook으로 스토리북을 띄우고 확인한다.

위 순서대로 진행한 후, 만약 제대로 실행되지 않는다면 왜 이런 문제가 발생했을지 확인해 보시고 잘 동작하도록 수정해 보시면 좋겠어요!

그리고 모든 컴포넌트에 공통된 피드백입니다.
만약 제가 Button 컴포넌트를 사용하려고 하는데, padding을 x방향으로 1000px만큼, y방향으로 1000px만큼 주고싶다면 어떡해야 할까요?
즉, 스타일 오버라이딩을 어떤 방식으로 제안하는 컴포넌트인가요?

README.md Outdated

## 3단계 과제

질문 1. webpack은 무엇이고 어떤 역할을 하고 있나요? -여러 개의 파일을 하나의 파일로 합쳐주는 번들러입니다. 여기서 번들러란 코드, 프로그램을 묶어서 패키지로 제공하는 것입니다. 하나의 시작점(index.js 등)으로부터 의존성을 가지는 모듈을 추적하여 하나의 결과물을 만들어내는 모듈 번들러 역할을 합니다.
Copy link

Choose a reason for hiding this comment

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

여러 파일을 하나로 합치는 이유는 무엇일까요?

Copy link
Author

Choose a reason for hiding this comment

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


현재 storybook이 정상적으로 실행되지 않는데요, 만약 효은님 환경에서는 정상적으로 동작하고 있다면 다음 순서에 따라 한 번 진행해보실래요?

  • node_modules 폴더를 삭제한다.
  • npm i로 다시 의존성을 설치한다.
  • npm run storybook으로 스토리북을 띄우고 확인한다.
    위 순서대로 진행한 후, 만약 제대로 실행되지 않는다면 왜 이런 문제가 발생했을지 확인해 보시고 잘 동작하도록 수정해 보시면 좋겠어요!

제 컴퓨터에는 의존성을 삭제 후 재설치해도 잘 실행이 되어서 어떤 부분에서 그렇게 말씀하셨는지 잘 모르겠습니다!
저번에 PR 날리기 직전, 갑자기 절대경로가 인식이 안되어서 .storybook/main.ts에 webpackFinal를 추가하여 해결했는데, 이부분이 문제인 걸까요?

Copy link
Author

Choose a reason for hiding this comment

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

  • 그리고 모든 컴포넌트에 공통된 피드백입니다.
    만약 제가 Button 컴포넌트를 사용하려고 하는데, padding을 x방향으로 1000px만큼, y방향으로 1000px만큼 주고싶다면 어떡해야 할까요?
    즉, 스타일 오버라이딩을 어떤 방식으로 제안하는 컴포넌트인가요?

emotion/reactcss props로 스타일을 오버라이딩합니다! 예를 들면

<Button css={css`
  padding-left:1000px;
  padding-right:1000px
`}/>

입니다. 사실 멘토님의 질문 의도를 제대로 파악하지 못하였는데, css props를 사용해서 재사용성을 어떻게 보장할 것인지 묻는 것일까요? 2주차 과제를 진행하면서 위 코드대로 했을 때, 컴포넌트 props에 css가 들어갈 수 없는 오류가 있었습니다. 그래서 열심히 찾아본 결과

@emotion/babel-preset-css-prop를 설치해보았는데,
import React from ‘react’ 와 같은 에러가 떠서 아래와 같이 시도했지만
결국 상단에 주석을 추가하는 방식으로 해결했습니다.. 이 방법밖에 없는 걸까요?

처음 시도해본 코드
//babel.config.js

module.exports = {
   presets: [
     '@babel/preset-env',
     ['@babel/preset-react', { runtime: 'automatic', importSource: '@emotion/react' }],
     ['@emotion/babel-preset-css-prop'],
   ],
   plugins: ['@emotion/babel-plugin'],
 };

결국 /* @jsxImportSource @emotion/react */ 를 추가하는 방법으로 해결

README.md Outdated

질문 1. webpack은 무엇이고 어떤 역할을 하고 있나요? -여러 개의 파일을 하나의 파일로 합쳐주는 번들러입니다. 여기서 번들러란 코드, 프로그램을 묶어서 패키지로 제공하는 것입니다. 하나의 시작점(index.js 등)으로부터 의존성을 가지는 모듈을 추적하여 하나의 결과물을 만들어내는 모듈 번들러 역할을 합니다.

질문 2. 브라우저는 어떻게 JSX 파일을 읽을 수 있나요? -바벨과 같은 컴파일러를 이용하여 JSX를 자바스크립트 객체로 변환하면 읽을 수 있습니다.
Copy link

Choose a reason for hiding this comment

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

  • 바벨이 JSX를 변환하고 나면 어떻게 바뀔까요?
  • 왜 변환까지 해가며 JSX를 사용하는 걸까요?

README.md Outdated

질문 2. 브라우저는 어떻게 JSX 파일을 읽을 수 있나요? -바벨과 같은 컴파일러를 이용하여 JSX를 자바스크립트 객체로 변환하면 읽을 수 있습니다.

질문 3. React에서 상태 변화가 생겼을 때 어떻게 변화를 알아챌 수 있나요? -상태 정보를 가진 객체의 주소값이 변경되면 알 수 있습니다!
Copy link

Choose a reason for hiding this comment

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

상태 변화를 알아채는 방법에 대한 적절한 설명이라고 할 수 있을까요~?

React는 어떻게 상태가 변했음을 알 수 있을까요??
상태를 변화시키기 위한 과정을 차근차근 하나씩 살펴보면서 다시 한 번 고민해보시면 좋겠습니다 ㅎㅎ

Copy link
Author

Choose a reason for hiding this comment

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

0c92c89
README에 추가적으로 공부하고 이해한 것들을 적어두었습니다!

Comment on lines 5 to 10
export interface IButton {
theme: THEME;
size: 'small' | 'large' | 'responsive';
children: string;
onClick: () => void;
}
Copy link

Choose a reason for hiding this comment

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

이렇게 만들어진 Button 컴포넌트는 button Element의 모든 api를 활용할 수 있을까요?
다른 컴포넌트처럼 IButtonextends를 사용해서 타입을 확장해보시면 좋겠어요!

현재 모든 prop이 필수로 설정되어 있어요.
optional prop으로 두는 것이 더욱 편리하거나, 유용할 수 있으니 어떤 것을 optional로 설정할지 한 번 고민해보시면 좋겠습니다.

Copy link
Author

Choose a reason for hiding this comment

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

e0a9e94
아래 네 개의 리뷰까지 Button.tsx 모두 수정하여 커밋했습니다!

export interface IButton {
theme: THEME;
size: 'small' | 'large' | 'responsive';
children: string;
Copy link

Choose a reason for hiding this comment

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

Button의 자식으로는 string만 허용해야 할까요?
만약 버튼 내부에 작은 svg아이콘과 문자열을 함께 넣고 싶다면 어떡하면 좋을까요?

Comment on lines 11 to 21
export const GoodsItem = ({ imageSrc, subtitle, title, amount, rankingIndex }: IGoodsItem) => {
return (
<GoodsItemWrapper>
{rankingIndex ? <RankingNumber rankingIndex={rankingIndex}>{rankingIndex}</RankingNumber> : null}
<img src={imageSrc} alt="goodsItem" />
<p className="subtitle">{subtitle}</p>
<p>{title}</p>
<h1>{amount}원</h1>
</GoodsItemWrapper>
);
};
Copy link

Choose a reason for hiding this comment

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

현재 과제에서 제공해준 스토리북과 default 상태의 생김새가 많이 다른 것 같습니다. 어떻게 수정해야할지 확인해보시면 좋겠어요.

};

const StyleContainer = styled.div<IContainer>`
max-width: ${(props) => props.maxWidth};
Copy link

Choose a reason for hiding this comment

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

현재 maxWidth의 타입이 string인데요, 문제가 발생할 여지가 많습니다.
예를 들어, 현재 스토리북에서 확인해보시면 maxWidth가 제대로 적용되지 않았어요.
단위가 없는 100이라는 문자열 대신 100px로 입력하시면 정상적으로 적용됩니다.

그럼 어떻게 해야 개발자의 실수를 최소화할 수 있을까요? 어떡하면 단위를 적용하도록 강제할 수 있을까요?
이걸 타입스크립트가 도와줄 수 있지 않을까요?

Copy link
Author

Choose a reason for hiding this comment

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

7f91189
구체적으로 px를 쓰도록 지정했습니다

import { css } from '@emotion/react';

export interface IGrid {
gap: number;
Copy link

Choose a reason for hiding this comment

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

gap을 주지 않고 싶다면 반드시 0을 줘야하는데, 너무 번거롭지 않을까요?

Copy link
Author

Choose a reason for hiding this comment

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

b75eff0
옵션으로 수정했습니다

Copy link

Choose a reason for hiding this comment

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

해당 파일은 불필요하므로 제거되어도 좋을 것 같아요~

Copy link
Author

Choose a reason for hiding this comment

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

2862a8c
불필요한 파일 제거했습니다.
코드리뷰 남겨주셔서 감사합니다!

Copy link

Choose a reason for hiding this comment

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

stories/asset 내부에 불필요한 파일이 많은 것 같아요. 정리해 주시면 좋겠습니다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants