-
Notifications
You must be signed in to change notification settings - Fork 41
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
feat(app, home): emotion 기반으로 홈 배너와 홈 페이지 컨테이너 로직을 변경합니다. #77
Conversation
d2e9f15
to
07d2697
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
우성님 고생하셨습니다 🙌
코멘트 남겼는데 도움이 되면 좋겠네요!
|
||
export const HomeBanner: React.FC = () => { | ||
return ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
React.FC
를 사용하지 말라는 여러가지 커뮤니티의 의견이 있는데요,
function
기명식 컴포넌트 선언에서는 타이핑 함수를 사용할 수가 없습니다.- 항상 children을 가질 수 있으므로 인식의 차이가 발생할 수 있습니다.
- React에서 제공하는
defaultProps
를 사용할 수 없게 합니다.
더 자세한 내용을 보고 싶다면 이 블로그를 참조하면 좋을 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코멘트 감사합니다! 블로그 포함해서 관련 내용은 더 살펴봐야겠지만 우선은 안 쓰는 방향으로 반영해나갈게요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이후 PR에서 반영했습니다!
@media (min-width: 544px) { | ||
max-width: 576px; | ||
} | ||
|
||
@media (min-width: 768px) { | ||
max-width: 720px; | ||
} | ||
|
||
@media (min-width: 992px) { | ||
max-width: 940px; | ||
} | ||
|
||
@media (min-width: 1200px) { | ||
max-width: 1140px; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 반응형 미디어 쿼리를 여러 곳에서 사용하게 되면 아래와 같은 상황이 헷갈리게 됩니다.
- 데스크탑 우선 vs 모바일 우선: min-width / max-width 차이
- px 기준
그래서 보통은, 디자인 토큰이나 상수로 width 값을 관리하게 됩니다.
추후에는 분리해도 좋을 것 같네요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 반응형 미디어 쿼리를 여러 곳에서 사용하게 되면 아래와 같은 상황이 헷갈리게 됩니다.
- 데스크탑 우선 vs 모바일 우선: min-width / max-width 차이
- px 기준
그래서 보통은, 디자인 토큰이나 상수로 width 값을 관리하게 됩니다. 추후에는 분리해도 좋을 것 같네요!
오 그렇군요 이 부분은 향후 더 좋은 방향을 접하는대로 조금씩 개선해 나가겠습니다!
import { Navbar } from './NavBar'; | ||
import { Footer } from './Footer'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
named export를 활용한다면 컴포넌트 export/import를 정말 직관적으로 바꿀 수 있습니다.
현재 프로젝트 코드 내에서 제가 추천하는 방향은 아래와 같습니다.
- Layout
- index.ts
- Layout.tsx
- NavBar.tsx
- Footer.tsx
- Layout/index.ts : 새로 생성합니다. 기존 Layout.tsx는 그대로 두시면 돼요.
export * from './Layout.tsx';
NavBar, Footer도 레이아웃 하위에 포함을 시키느냐? 시키지 않느냐는 내부 컨텐츠를 주입하게 할 건지, 혹은 갖고 있을 건지 선택해서 설계하시면 되겠습니다 🙌
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
내부 컨텐츠를 주입하게 할 건지, 혹은 갖고 있을 건지 선택해서 설계하시면 되겠습니다 🙌
현재 UI를 보았을 때에는 변화되는 지점이 없긴 해서 (있다면 네비바 우측 상단 눌렀을 때 눌러진 상태를 변경하는 부분인데 여기만 내부적으로 처리하는 게 문제가 없다고 한다면) 주입하지 않고 내부에서 처리하도록 해도 될 것 같은데 이렇게 간다면 Layout 하위에 포함하도록 가면 될까요~?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
우선 Layout 폴더 안에 전부 넣는 쪽으로 수정했습니다!
type LayoutProps = PropsWithChildren; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 급하게 작성해서 이러한 코드 뭉치를 그대로 두었는데, 이러한 타입 alias 기법은 제3자로 하여금 그 의도를 흐리게 만들기 때문에 가급적 사용하지 않는게 좋긴 합니다🥲
type LayoutProps = PropsWithChildren; | |
type LayoutProps = PropsWithChildren<{}>; |
차라리 이렇게 하거나...
type LayoutProps = PropsWithChildren; | |
type LayoutProps = { | |
children?: ReactNode; | |
} |
이렇게 하는 것을 추천드립니다 💪
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 코멘트 감사합니다 저는 고르라면 후자쪽을 고를 것 같습니다 ㅎㅎ
-> 후자쪽으로 수정했습니다!
export const Banner = styled.div` | ||
color: #fff; | ||
background: #333; | ||
padding: 2rem; | ||
margin-bottom: 2rem; | ||
`; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
현재 Banner 관련 속성이 이렇게 나뉘어져 있는데요,
- Banner.tsx
- BannerTitle.tsx
apps/react-world/src/components/shared/banner/Banner.styled.ts
로 파일을 하나 만들어서... 분리되어 있는 스타일 구문을 합치는 것이 좀 더 직관적일 것 같은데요, 우성님께서는 어떻게 생각하실까요?
export const Banner = styled.div` | |
color: #fff; | |
background: #333; | |
padding: 2rem; | |
margin-bottom: 2rem; | |
`; | |
// Banner.styled.ts | |
import styled from '@emotion/styled'; | |
export const Banner = styled.div` | |
color: #fff; | |
background: #333; | |
padding: 2rem; | |
margin-bottom: 2rem; | |
`; | |
export const BannerTitle = styled.h1` | |
text-shadow: 0px 1px 3px rgba(0, 0, 0, 0.3); | |
margin-bottom: 0px; | |
`; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
.styled.ts
방식으로 스타일을 모아두는 형태도 가능하군요..! 스타일 코드가 많지 않아서 이 방향 좋은 것 같습니다 🙌
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@InSeong-So 말씀대로 한다면 banner 폴더 안에 기존 파일 두 개는 지워지고 스타일 파일 Banner.styled.ts(x?) 파일 하나만 남도록 하면 되는 것 맞을까요? 폴더 안에 컴포넌트 파일이 따로 없고 styled 파일 안에 styled component 선언만 있는게 원래 자연스러운 방식인가 헷갈려서요 ㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
우선 위처럼 했습니다! 하면서 하나 추가로 들었던 궁금증은, HomeBanner 쪽도 컴포넌트 선언과 스타일이 같이 있는데 여기도 동일한 기준일까 싶어서 HomeBanner.tsx 와 HomeBanner.styled.ts 두 개로 분리해보았습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 저도 파랑의 말씀에 동의해요~! HomeBanner 쪽도 동일한 기준으로 가져가는 것도 좋은 것 같아요!
저는 .ts
/.tsx
로 분리하는 기준은 그 파일 안에 JSX(Html 태그가 아닌 Element 태그 ex: <HomeBannerTitle />
등)이 있는지 여부로 판단해요!
styled 파일엔 스타일 선언부만 존재하기에 .ts
로 사용되는 것이 맞는 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 저도 파랑의 말씀에 동의해요~! HomeBanner 쪽도 동일한 기준으로 가져가는 것도 좋은 것 같아요!
저는
.ts
/.tsx
로 분리하는 기준은 그 파일 안에 JSX(Html 태그가 아닌 Element 태그 ex:<HomeBannerTitle />
등)이 있는지 여부로 판단해요! styled 파일엔 스타일 선언부만 존재하기에.ts
로 사용되는 것이 맞는 것 같아요!
오 자세한 설명 감사합니다! ㅎㅎ
07d2697
to
8a746b0
Compare
… 를 걸지 않고 children 을 직접 props 에 선언하도록 변경
📌 이슈 링크
📖 작업 배경
🛠️ 구현 내용
home/
같이 페이지 별로 나뉘다 보니,shared/
폴더를 만들어서 관리하려고 하는데 좋은 방향일까 모르겠네요 🤔shared/
폴더로 옮깁니다.💡 참고사항
🖼️ 스크린샷
기존과 동일하게 스타일이 잘 표시되고 있는 상태