Skip to content

πŸ“– μ½”λ“œ 및 넀이밍 μ»¨λ²€μ…˜

KimDaeGeon edited this page Oct 10, 2024 · 2 revisions

πŸ“Œ μ½”λ“œ μ»¨λ²€μ…˜

1️⃣ export

νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈλŠ” default export 둜 내보내 μ£Όμ„Έμš”! μΆ”ν›„ lazy loading 을 μœ„ν•¨ μž…λ‹ˆλ‹€!

export default function Page() {}

νŽ˜μ΄μ§€λ₯Ό μ œμ™Έν•œ 기타 μ»΄ν¬λ„ŒνŠΈλŠ” ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈ μ΄λ¦„μœΌλ‘œ ν•˜μœ„λ””λ ‰ν† λ¦¬λ₯Ό λ§Œλ“€κ³ , index.tsx νŒŒμΌμ„ λ§Œλ“€μ–΄ μž‘μ—…ν•΄μ£Όμ„Έμš”!
이후, ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ named export 둜 내보내 μ£Όμ„Έμš”!

// src/components/MyComponent/index.tsx
export const MyComponent = () => {
    return <></>;
};

2️⃣ types

Props 에 λŒ€ν•œ νƒ€μž…μ€ MyComponentProps 와 같은 ν˜•μ‹μœΌλ‘œ interface 둜 μ§€μ •ν•΄ μ£Όμ„Έμš”

// src/components/MyComponent/index.tsx
interface MyComponentProps {
    children: React.ReactNode;
}

export const MyComponent = ({ children } : MyComponentProps) => {
    return <></>;
};

3️⃣ props

Props λŠ” ꡬ쑰뢄해할당을 μ΄μš©ν•˜μ—¬ μ‚¬μš©ν•΄μ£Όμ„Έμš”!

export const Good = ({ prop1, prop2 }) => {};
export const Bad = (props) => {};

4️⃣ Style μ»΄ν¬λ„ŒνŠΈ

Style μ»΄ν¬λ„ŒνŠΈ (νŠΉμ • μ»΄ν¬λ„ŒνŠΈμ˜ μŠ€νƒ€μΌλ§μ—λ§Œ μ‚¬μš©λ˜λŠ” μ»΄ν¬λ„ŒνŠΈ) λŠ” μ»΄ν¬λ„ŒνŠΈ ν•˜μœ„ 디렉토리에 index.style.ts 둜 νŒŒμΌμ„ λΆ„λ¦¬ν•΄μ£Όμ„Έμš”
이후 ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈκ°€ κ΅¬ν˜„λœ νŒŒμΌμ—μ„œ import * as Styles from "./index.style.ts"; 와 같이 μ‚¬μš©ν•΄μ£Όμ„Έμš”

// src/component/MyComponent/index.tsx
import * as Styles from "./index.style.ts";

export const MyComponent = () => {
    return (
        <Styles.Wrapper>
            <Styles.Container>
                <Styles.Item></Styles.Item>
                <Styles.Item></Styles.Item>
            </Styles.Container>
        </Styles.Wrapper>
    );
};
// MyComponent.style.tsx
export const Wrapper = styled.div``;
export const Container = styled.div``;
export const Item = styled.div``;

5️⃣ 넀이밍 μ»¨λ²€μ…˜

CSS Style MixIn 은 snake_case 둜,
일반 ν•¨μˆ˜ / λ³€μˆ˜λŠ” camelCase 둜,
μ»΄ν¬λ„ŒνŠΈλŠ” PascalCase 둜 μž‘μ„±ν•΄μ£Όμ„Έμš”!

// src/style/utils.ts
import { css } from "@emotion/react";

export const place_center = css`
    display: flex;
    justify-content: center;
    align-items: center;
`;
// src/store/auth.slice.ts
export const authSlice = createSlice({
    name: "getp/auth",
    initialState,
    // ...
});
export const MyComponent = () => {};

ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈ λͺ…을 λͺ…λͺ…ν•˜κΈ° μ–΄λ €μšΈλ•Œ μ°Έκ³ ν•˜μ‹œλ©΄ 쒋을 λ“― ν•©λ‹ˆλ‹€!
μ €λŠ” Wrapper > Container > (Items) > Item > … 으둜
μ„Έλ‹¨κ³„μ˜ ν•˜μœ„ Element 둜 λΆ„λ¦¬λ˜λŠ” 경우 Header Body Footer 둜 μž‘λͺ…ν•˜λŠ” νŽΈμž…λ‹ˆλ‹€