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

feat : index.html을 기반으로 메인 페이지를 구성합니다. #58

Merged
merged 29 commits into from
Sep 8, 2023

Conversation

brgndyy
Copy link
Collaborator

@brgndyy brgndyy commented Sep 4, 2023

📖 작업 배경 : 🌟 FEATURE: [2 Week] 메인 페이지를 개발합니다. #47

  • 페이지 별로 개발을 진행해보려고 합니다. 로그인 되어 있지 않을때의 메인 홈페이지 상태부터 구현한 후, 그 후에 다른 라우팅 페이지들을 만들어갈 계획입니다.

🛠️ 구현 내용

  • ssr 환경에서 다크모드를 구현했습니다.
  • vanilla-extract를 사용하여 런타임을 줄일수 있었습니다.

💡 참고사항

  • 이번 스터디를 통해 vanilla-extract를 처음 사용해본 거라서 css 구조를 잘 짠건지는 모르겠습니다. 더 나은 방향이 있다면 조언 부탁드립니다.

🖼️ 스크린샷

스크린샷 2023-09-04 오후 1 24 34

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

이 전역 Theme 내에서 다른 css variables를 설정해서 사용해줄수 있을것 같은데, 일단 전체적인 background 색상만 지정해놓았습니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

현재는 다크모드에 맞는 배너 이미지가 렌더링 되어있는데, 후에 전역상태관리를 도입하여 상태값에 맞는 이미지를 동적으로 렌더링 해주려고 합니다!
화면 기록 2023-09-04 오후 2 51 05

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

ssr 환경에서 단순히 리액트 훅들을 사용해서 다크모드를 구현하려 하면, 다크모드 상태에서 새로고침을 했을때 흰색 바탕이 일시적으로 깜빡였다가 후에 다크모드가 적용 되는 현상이 발생합니다.

그걸 방지하기 위해 렌더링 되기전에 즉시 실행 함수를 실행시켜주어서 해당 테마를 적용시켜주었습니다.

children: React.ReactNode;
}) {
const currentTheme = getThemeCookieValue();
const themeInitializerScript = generateThemeScript(currentTheme);
Copy link
Collaborator

@hhhminme hhhminme Sep 5, 2023

Choose a reason for hiding this comment

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

이거 좋네요 저도 유사하게 개발해보겠습니다 감사합니다

@hhhminme
Copy link
Collaborator

hhhminme commented Sep 6, 2023

지금 다시 보니 base branch만 수정해주시면 좋을 것 같습니다 ㅎㅎ main으로 향해 있군요

@brgndyy brgndyy changed the base branch from main to team9/brgndyy September 6, 2023 22:45
Comment on lines +9 to +11
if (!currentTheme) {
currentTheme = "light";
}
Copy link
Member

Choose a reason for hiding this comment

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

currentThemeObj 가 옵셔널 체이닝 되어 상단 ||에 걸릴 것 같은데 조건문이 있어야 하나용?

Comment on lines +20 to +23
export const lightVars = createGlobalTheme(":root", {
colorBackground: "#fff",
text_color: "#000",
});
Copy link
Member

Choose a reason for hiding this comment

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

":root" 는 추후에 variables 객체 모아놓은 코드로 분리할 수도 있겠네요! 역시 VE는 직관적입니다 😌

Comment on lines +21 to +27
const popularTags = countArticleTags({ articles });

if (!popularTags) {
return [];
} else {
return popularTags;
}
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
const popularTags = countArticleTags({ articles });
if (!popularTags) {
return [];
} else {
return popularTags;
}
const popularTags = countArticleTags({ articles }) || [];
return popularTags;

요건 어떨까요?
그리고 상단의 코드 라인들이 다 한 칸씩 떨어져 있는데 조건문이냐, 같은 관심사냐, 그루핑된 맥락이냐에 따라 합쳐도 좋을 것 같습니다용

Comment on lines +10 to +12

const res = await fetch(endPoint);

Copy link
Member

Choose a reason for hiding this comment

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

이렇게 사용하는 데이터 패칭 코드 라인은 추후 리팩토링 되는 것이겠죠?!

Comment on lines +2 to +6
const getArticlesEndPoint = `${process.env.NEXT_PUBLIC_GET_ARTICLES_END_POINT}?offset=0&limit=9`;

if (!getArticlesEndPoint) {
throw new Error("엔드포인트를 확인해주세요! ");
}
Copy link
Member

Choose a reason for hiding this comment

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

템플릿 리터럴로 감쌌는데 부정문이 걸릴 일이 있나요? 😳

Comment on lines +17 to +18
const httpAbortCtrl = new AbortController();
activeHttpRequests.current.push(httpAbortCtrl);
Copy link
Member

Choose a reason for hiding this comment

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

보통은 useEffect에서 패치 핸들링할 때 자주 활용하는데... 신선한 방식이네요 👀

Comment on lines +13 to +14
headers: Record<string, string> = {}
): Promise<any> => {
Copy link
Member

Choose a reason for hiding this comment

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

any 타입을 제거해볼 수 있을 것 같은데요?!

Comment on lines +3 to +4
export const useDarkMode = (currentTheme: string) => {
const [darkTheme, setDarkTheme] = useState<boolean>(currentTheme === "dark");
Copy link
Member

Choose a reason for hiding this comment

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

어디서 본 것 같은 코드가....
useTheme도 비슷했던 맥락인거 같네요!

Comment on lines +3 to +5
type Children = {
children: React.ReactNode;
};
Copy link
Member

Choose a reason for hiding this comment

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

요렇게 사용하실거라면 PropsWithChildren 타입은 어떠신가요?

} from "@/styles/popular_tags.css";
import { color_state } from "@/styles/container.css";

type tagListType = {
Copy link
Member

Choose a reason for hiding this comment

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

컨벤션...! 변수인줄 알았네요 🫠

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

리뷰들 다 확인했습니다! 한번 말씀 해주신대로 수정해보겠습니다 :)
하나하나 확인해주시고 말씀주셔서 감사드려요 🤩

@InSeong-So InSeong-So merged commit aa195e0 into pagers-org:team9/brgndyy Sep 8, 2023
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.

3 participants