이 페이지에는 Carrot market UI Cloning에 대한 노트 이다.
무엇보다 Tailwind 사용으로 인하여 코드의 가독성이 떨어짐으로 가독성 관리에 대한 내용, layout(어떠한 페이지에도 항상 나오게될 ex) tab bar, 뒤로가기 버튼 등) page 만드는 방법 그리고 css 스타일링에 있어 알아두면 좋을 점들에 대한 내용들을 적어 놓았다.
pages/enter.tsx
const [method, setMethod] = useState<"email" | "phone">("email");
// email 또는 phone 이라는 string 변수를 버튼을 눌렀을때 toggle되도록 넣기 위한 코드이며, 초기 값은 email로 정함.
pages/enter.tsx
function cls(...classnames: string[]) {
// 무한 으로 인자를 받기위해 ...function을 사용 하였으며(이 코드에선 2개의 인자), 타입은 문자열 배열로 지정.
return classnames.join(" ");
} // return시 모든 String 배열들 사이에 한칸의 공백을 추가해 리턴.
className={cls(
"pb-4 font-medium text-sm border-b-2",
method === "email"
? " border-orange-500 text-orange-400"
: "border-transparent hover:text-gray-400 text-gray-500"
)}
//스타일 조건을 위한 삼항연사자와 일반 스타일 속성들이 함께 적용되야 하기 때문에, 이 코드의 가독성이 줄어 들게 된다.
그러므로 cls 라는 function 을 만들어 위의 코드와 같이 조금 더 깔끔한 코드로 바꿀수 있다.
하드 코딩 시에는 ${} 과 `` 같은 EL들의 중복하게 되어 가독성이 떨어진다.
components/layout.tsx
import React from "react";
import { cls } from "../libs/utils";
// 자주 쓰이기에 libs/utils 에 넣어 두었다.
interface LayoutProps {
title?: string;
canGoBack?: boolean;
hasTabBar?: boolean;
children: React.ReactNode;
}
//여기서 React.ReactNode는 jsx 내에서 사용할수 있는 모든 요소의 타입을 의미 한다.
export default function Layout({
title,
canGoBack,
hasTabBar,
children,
}: LayoutProps) {
// typescript에서 interface에 지정한 변수의 타입들을 선언할때 이와 같은 방식으로 선언한다.
return (
<div>
<div className="bg-white w-full text-lg font-medium py-3 fixed text-gray-800 border-b top-0 justify-center flex items-center">
{title ? <span>{title}</span> : null}
</div>
<div className={cls("pt-16", hasTabBar ? "pb-16" : "")}>{children}</div>
{hasTabBar ? (
<nav className="bg-white text-gray-800 border-t fixed bottom-0 pb-10 pt-3 flex justify-between items-center"></nav>
) : null}
</div>
);
}
위의 코드에서, children을 중심으로 위쪽엔 title 아래쪽엔 tab bar 가 화면에 뿌려지게 된다.
import Layout from "../components/layout";
<Layout title="홈" hasTabBar>
... //요소들
</Layout>
위의 코드는, 다른 파일에서 Layout 컴포넌트로 감싸 title, hasTabBar, canGoBack 과 같은 props 를 사용 하여 title, 하단 Tab bar, goback UI를 어느 페이지에서나 선택적으로 보여줄수 있다.
Tailwind plugin : 강의에서는 input layer를 변경 할수있는 plugin을 사용하였다.
설치 커맨드 : npm i @tailwindcss/forms
설치후 configration 적용
tailwind.config.js
plugins: [require("@tailwindcss/forms")],
주요 Tailwind 또는 CSS 스타일 속성들.
이외 알아두어야 할것들.