packages/
└── hooks/
├── dist/ ← CJS 빌드 결과물 **(npm run build 했을 때만)**
├── esm/ ← ESM 빌드 결과물 **(npm run build 했을 때만)**
├── src/ ← 소스 코드
│ ├── libs/ ← 🔁 재사용 가능한 훅(hooks)들을 모아두는 폴더
└── index.ts ← 📦 훅들을 한 번에 export 하는 엔트리 파일
├── .gitignore ← 다들 알죠?
├── package.json ← 라이브러리 메타 정보 및 빌드 스크립트
├── tsconfig.json ← CJS용 TypeScript 설정
└── tsconfig.esm.json ← ESM용 TypeScript 설정
└── components/
✅ react라는 이름으로 디렉토리를 분리한 이유는, 추후 vue, solid 등의 다른 플랫폼용 라이브러리도 함께 관리할 수 있도록 확장성을 고려했기 때문입니다.
hooks와 components로만 분리를 진행했습니다! 우선 react 환경에만 집중을 하는게 좋다고 느꼈습니다! (feat. 범태)
npm init을 통해 기본 설정을 생성합니다.vite 기반 설정도 가능하지만, 현재는 가볍고 단순한 tsc 기반 빌드로 설정합니다.npm install --save-dev typescript tslib react
src/libs/useBooleanState.ts (예시)
import { useState, useCallback } from "react";
type UseBooleanStateReturn = [
value: boolean,
setTrue: () => void,
setFalse: () => void,
toggle: () => void
];
/**
* useBooleanState 훅은 boolean 상태를 제어하는 튜플을 반환합니다.
*
* @returns [value, setTrue, setFalse, toggle]
*/
export function useBooleanState(initial: boolean = false): UseBooleanStateReturn {
const [value, setValue] = useState(initial);
const setTrue = useCallback(() => setValue(true), []);
const setFalse = useCallback(() => setValue(false), []);
const toggle = useCallback(() => setValue((v) => !v), []);
return [value, setTrue, setFalse, toggle];
}