2024 스터디 - ChoDragon9/posts GitHub Wiki
- Custom Hook
- Custom Hook은
state
그 자체를 공유햐는게 아닌state
저장 로직을 공유하도록 한다. - Hook을 사용하지 않는 코드는
use
를 사용하는 것을 피해라 - 컴포넌트가 렌더링 될 때 마다 Hook에게 값을 넘겨줌
- 때문에
useEffect
나 Custom Hook 대신 헬퍼 함수를 사용해도 괜찮음
- 때문에
- Custom Hook은
-
React-Router
에서 Dynamic Import를 사용할 때, Dynamic Import 되는 파일은default
가 없기 때문에export default
로 처리할 수 없다.-
Component
명의 함수를export
하고,Component.displayName
을 컴포넌트명을 명시하면 해결할 수 있다.
-
-
webpack
에서inline-source-map
을 사용하면bundle.js
의 사이즈가 권장 사양 커지게 된다.-
inline-source-map
을source-map
으로 변경하면bundle.js
과bundle.js.map
파일을 분리할 수 있다.
-
수동
export const paths = {
framework: {
react: '/framework/react',
vue: '/framework/vue',
},
language: {
typescript: '/language/typescript',
javascript: '/language/javascript',
} ,
pattern: {
mvc: '/pattern/mvc',
flux: '/pattern/flux',
}
};
type PathsType = typeof paths;
type PathsKeys = keyof PathsType;
type PathsInnerKeys = {
[key in PathsKeys]: keyof PathsType[key]
}[PathsKeys];
재귀적으로 처리
export const paths = {
framework: {
react: '/framework/react',
vue: '/framework/vue',
},
language: {
typescript: '/language/typescript',
javascript: '/language/javascript',
} ,
pattern: {
mvc: '/pattern/mvc',
flux: '/pattern/flux',
}
};
type Keys<Type> = {
[Key in keyof Type]: keyof Type[Key] extends string
? keyof Type[Key]
: Keys<Type[Key]>
}[keyof Type];
type PathsType = typeof paths;
type PathsInnerKeys = Keys<PathsType>
내부 키 모두 추출하기
export const paths = {
framework: {
react: '/framework/react',
vue: '/framework/vue',
},
language: {
typescript: '/language/typescript',
javascript: '/language/javascript',
},
pattern: {
flux: '/pattern/flux',
model_view: {
mvc: '/pattern/model_view/mvc',
mvvm: '/pattern/model_view/mvvm',
}
}
};
type Keys<Type> = Type extends string
? never
: keyof Type | Keys<Type[keyof Type]>;
type PathsType = typeof paths;
type PathsKeys = Keys<PathsType>;
재귀적으로 값 추출
export const paths = {
framework: {
react: '/framework/react',
vue: '/framework/vue',
},
language: {
typescript: '/language/typescript',
javascript: '/language/javascript',
},
pattern: {
flux: '/pattern/flux',
model_view: {
mvc: '/pattern/model_view/mvc',
mvvm: '/pattern/model_view/mvvm',
}
}
} as const;
type Values<Type> = {
[Key in keyof Type]: Type[Key] extends string
? Type[Key]
: Values<Type[Key]>
}[keyof Type];
type PathsType = typeof paths;
type PathsValues = Values<PathsType>;